8

PythonとOpenCVを使用してWebカメラからビデオストリームを取得したいのですが、そのタスクのために、この単純なコードを実装しました。

import cv

cv.NamedWindow("w1", cv.CV_WINDOW_AUTOSIZE)
capture = cv.CaptureFromCAM(0)

def repeat():
  frame = cv.QueryFrame(capture)
  cv.ShowImage("w1", frame)


while True:
  repeat()

実行しようとすると、次のエラーが発生します。

andfoy@ubuntu:~/Python$ python camera.py
VIDIOC_QUERYMENU: Argumento inválido   
VIDIOC_QUERYMENU: Argumento inválido
VIDIOC_QUERYMENU: Argumento inválido

他の投稿で提案されているように、次の行を変更しました。

capture = cv.CaptureFromCAM(0)

に:

capture = cv.CaptureFromCAM(-1) 

しかし、エラーは解決しません。

4

2 に答える 2

22

waitkey最後に関数を追加する必要があります。

以下のコードは私にとってはうまくいきます。

import cv
cv.NamedWindow("w1", cv.CV_WINDOW_AUTOSIZE)
capture = cv.CaptureFromCAM(0)

def repeat():
    frame = cv.QueryFrame(capture)
    cv.ShowImage("w1", frame)

while True:
    repeat()
    if cv.WaitKey(33)==27:
        break

cv.DestroyAllWindows()

ご存じないかもしれませんが、現在の OpenCV は新しい python APIcv2を使用しており、多くの機能を備えています。その中で、同じコードは次のように書かれています:

import cv2
import numpy as np
c = cv2.VideoCapture(0)

while(1):
    _,f = c.read()
    cv2.imshow('e2',f)
    if cv2.waitKey(5)==27:
        break
cv2.destroyAllWindows()
于 2012-06-13T19:32:04.523 に答える
1

以下のコードは、python 2.7 および python 2.7 用にビルドされた opencv で機能します。

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

if not(cap.isOpened()):
    cap.open()

while(cap.isOpened()):
    ret, frame = cap.read()
    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
于 2015-01-09T19:12:13.073 に答える