5

次のコードを使用して、openCV+pythonを使用してWebカメラにアクセスしています...

import cv

cv.NamedWindow('webcam_feed', cv.CV_WINDOW_AUTOSIZE)

cam = cv.CaptureFromCAM(-1)

その後、コンソールで次のエラーが発生します...

VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument

私はもともと使っていました、

cv.CaptureFromCAM(0)

同じものにアクセスし、同じ問題が発生し、-1を使用しました。これは、任意のWebカメラを取得することを想定しているためです。

また、UbuntuがWebカメラを認識しているかどうかをテストしました。ウェブカメラにv4l2を使用しています。

{編集}

次のコードを使用してビデオフィードを表示していますが、連続ビデオフィードではなく、Webカメラがキャプチャした画像を1つだけ表示しているようです...

import cv
cv.NamedWindow('webcam_feed', cv.CV_WINDOW_AUTOSIZE)
cam = cv.CaptureFromCAM(-1)
feed = cv.QueryFrame(cam)
cv.ShowImage("webcam_feed", feed)
cv.WaitKey(-1)
4

3 に答える 3

1

うわー、これを投稿した後、15で自分の質問に答えました。私はいくつかの調査を行いました.Webカメラが1つの画像しか取得しない理由は...

cv.WaitKey(-1)

これにより、ウィンドウの内容が更新されなくなります。数を10に設定しました...

cv.WaitKey(10)

そしてそれは美しく働きました。100も試しましたが、違いは見られませんでした。数値が 1000 の場合にのみ違いが見られました。1 を使用すると、最もスムーズに動作するようです。

Web カメラ フィードを表示する完全なコードは次のとおりです。

import cv

cv.NamedWindow("webcam", 1)

cam = cv.CaptureFromCAM(-1)

While True:
feed = cv.QueryFrame(cam)
cv.ShowImage("webcam", feed)
cv.WaitKey(1)
于 2012-07-06T05:51:29.640 に答える
0

私にとって、ルートのコマンド

xhost +

時間を節約してください。新しいターミナルを閉じて開くことに注意してください。

またね。

于 2016-10-28T21:57:06.780 に答える
0

私はあなたが置く必要があると信じています

frame = cv.QueryFrame(cam)
cv.ShowImage("Webcam Feed", frame)

ウィンドウに表示される画像を継続的に更新するループ。つまり、からのフレームcv.QueryFrameは静止画像であり、連続したビデオではありません。

キーを押して終了できるようにしたい場合cv.WaitKeyは、ループ内でも短いタイムアウトでテストしてください。

于 2012-07-06T05:50:41.907 に答える