网络摄像头流和OpenCV-python

2024-05-15 09:54:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用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()

当我尝试执行它时,会出现以下错误:

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) 

但错误依然存在。


Tags: 网络错误frameopencvcvw1capture摄像头
2条回答

您需要在末尾添加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()

下面的代码适用于Python2.7和为Python2.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()

相关问题 更多 >