ビーグルボーンのLogitech c310ウェブカメラにアクセスしようとしています。デバイスIDに対して常にfalseを返しますが、その理由はわかりません。
次のコードを使用します。
>>> import cv2, numpy as np
>>> cam = cv2.VideoCapture(0)
>>> cam.open(0)
False
以下のように、カメラはdev /およびroot@arm:~#lsusb
にもvideo0として表示されます。
root@arm:~# lsusb
Bus 001 Device 002: ID 046d:081b Logitech, Inc. Webcam C310
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
v4l2-ctl
でカメラにアクセスすることもできます。私はOpenCVが初めてなので、これは馬鹿げているように聞こえるかもしれませんが、事前に謝罪します。
HIGHGUI ERROR: V4L: index 1 is not correct!
False
OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat, file /home/kaushik/Desktop/OpenCV-2.4.1/modules/core/src/array.cpp, line 2482
Traceback (most recent call last):
File "x2.py", line 8, in <module>
cv2.imshow('frame', frame)
cv2.error: /home/kaushik/Desktop/OpenCV-2.4.1/modules/core/src/array.cpp:2482: error: (-206) Unrecognized or unsupported array type in function cvGetMat
この種のエラーが発生している場合は、おそらくインデックス付けに何らかの問題があります。
cv2.VideoCapture(0)の代わりに追加:
cv2.VideoCapture(-1)
これにより、最初のカメラが機能します。そして、何かがうまくいかない場合は、ここにスタックトレースを投稿するだけで、あなたを助けることができるかどうかわかります:)
cv2がpypi wheelからインストールされた場合、ビデオ関連機能はサポートされません(FFmpegでコンパイルされません):
pip install opencv-python
同様の問題に出会いました。ユーザーの許可に関連している可能性があります。次の手順を使用して問題を診断してください。
次のコマンドを実行して、カメラのアクセス許可を確認します
ls -la /dev/video*
次のような出力が得られる場合があります(複数のカメラがある場合は、video1が得られます)。ご覧のとおり、root
ユーザーとvideo
グループのユーザーのみがカメラへのアクセス許可を持っています。
crw-rw----. 1 root video 188, 0 Apr 3 21:16 /dev/video0
したがって、修正は簡単です。次のコマンドを使用して、ユーザーアカウントをvideo
グループに追加します。
Sudo usermod -a -G video <you login name>
それが役に立てば幸い!
私にとっての解決策は、コンピューターを再起動することでした。 bcは決定的な解決策ではないようですが、私はそれが好きではありません。しかし、それはjupyterノートブックの問題だったのかもしれません。現在、私はspyder bcで作業しています。jupyterの方が問題を起こしやすいと読みました。
Cv2.VideoCapture()に渡される引数に依存します。
通常、PCのプライマリWebカメラを機能させるには0です。同様に、システムにインストールされている2番目のカメラにアクセスする場合は、引数を2として渡します。
ただし、カメラが1台しかなく、「0」のインデックス付けが役に立たない場合は、代わりにインデックスを-1として渡してみてください。
最初にビデオをキャプチャしようとしている場合、cam.open()は正しい方法ではありません。 open()メソッドは、カメラオブジェクト(この場合は「cam」)を初期化します。
次に、cvはcamオブジェクトを初期化できないため、cam.open()はfalseを返します。 VideoCapture()メソッドは既にカメラオブジェクトを初期化します。これを確認するには、次を追加します
cam.isOpened()
直後の
cam.VideoCapture(0)
それは「True」を返します。
第三に、カメラフィードを無効にする場合、これが従来の方法です。
import cv2
cam = cv2.VideoCapture(0)
print cam.isOpened()
while(True):
ret, frame = cam.read()
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cam.release()
cv2.destroyAllWindows()
あなたが多くの方法でそれを解決しなかった場合、あなたはしようとすることができます
「opencv3.2.0-dev」を見つけてインストールします、私はそれを使用して解決します
問題を2回。
pip install opencv-pythonだけでは十分ではありません。
少なくとも時々)
ドキュメントに何か役立つ情報が見つかりました。
cap.read()はブール値(True/False)を返します。フレームが正しく読み取られると、Trueになります。キャップがキャプチャを初期化していない場合があります。その場合、コードはエラーを示します。メソッドcap.isOpened()で初期化されているかどうかを確認できます。 Trueの場合、OK。それ以外の場合cap.open()を使用して開きます。