网络摄像头流和OpenCV - python

Edg*_*uay 8 python webcam opencv

我想使用python和OpenCV从我的网络摄像头获取视频流,为此任务我实现了这个简单的代码:

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()
Run Code Online (Sandbox Code Playgroud)

当我尝试执行它时,我收到以下错误:

andfoy@ubuntu:~/Python$ python camera.py
VIDIOC_QUERYMENU: Argumento inválido   
VIDIOC_QUERYMENU: Argumento inválido
VIDIOC_QUERYMENU: Argumento inválido
Run Code Online (Sandbox Code Playgroud)

我按照其他帖子的建议更改了以下行:

capture = cv.CaptureFromCAM(0)
Run Code Online (Sandbox Code Playgroud)

至:

capture = cv.CaptureFromCAM(-1) 
Run Code Online (Sandbox Code Playgroud)

但错误仍然存​​在.

Abi*_*n K 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()
Run Code Online (Sandbox Code Playgroud)

如果你不知道,现在的OpenCV使用新的python api cv2,它有很多功能.在那,相同的代码写为:

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()
Run Code Online (Sandbox Code Playgroud)