質問内容
pythonでopencvを用いてカメラの映像が映し出されるようにしようと考えています。その方法を検索して試してみたのですがエラーが出てし、そのエラーがよくわかりません。またこのようなエラーが出ずに成功するときもあります。どのようなことをすれば解決することが出来るでしょうか?
以下は参考にしたサイトです。
リンク内容
ソースコード
カメラはusbカメラの1台だけを使いたいのでVideoCapture()の引数を0にしていたのですが、1のほうがエラーが少なかったのでこちらにしました。また引数を2にしたところエラーは発生しなかったのですが、何も起きずに終了してしまいました。
python
1import cv2 2import numpy as np 3cap = cv2.VideoCapture(1) 4while(cap.isOpened()): 5 # フレームを取得 6 ret, frame = cap.read() 7 8 # フレームを表示 9 cv2.imshow("Flame", frame) 10 11 # qキーが押されたら途中終了 12 if cv2.waitKey(1) & 0xFF == ord('q'): 13 break 14 15cap.release() 16cv2.destroyAllWindows() 17
エラーメッセージ
VideoCapture()の引数が1のときのエラーメッセージです。
python
1[WARN:0]global C:\projects\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (436) 2'anonymous-namespace'::SourceReaderCB::~SourceReaderCB terminating async callback
ret, frame = cap.read() の行の下に、print(type(frame))とprint(frame.shape)の2行を追加して、何が表示されるか確認してみてください。
このプログラムを何回も実行してみたところ失敗するときだけでなく成功するときも出てきました。このようなことを後から書いてしまいすみません。
助言いただいたように上の2文を追加してみたのですが、
失敗の時は
<class 'NoneType'>
Traceback (most recent call last):
File "kamera.py", line 9, in <module>
print(frame.shape)
AttributeError: 'NoneType' object has no attribute 'shape'
成功の時は
<class 'numpy.ndarray'>
(480,640,3)
が何回も出てきます。
成功するときと失敗するときがあるということは、カメラからのデータ読み取りが間に合っていないのかもしれませんね。
"import cv2"の行の次に、"import time”の行を挿入し、
”ret, frame = cap.read()”の行の上と下の2か所に"time.sleep(1)"の行を挿入してみてください。time.sleep(1)で1秒の待ち時間を入れると動作が安定するのではないかと思います。
実行失敗がなくなりました!
ありがとうございました!
回答2件
あなたの回答
tips
プレビュー