2012-06-13 257 views
8

我想從使用python和OpenCV我的攝像頭的視頻流,該任務我實現了這個簡單的代碼:網絡攝像頭流和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() 

當我嘗試執行它,我出現以下錯誤:

[email protected]:~/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) 

但錯誤仍然存​​在。

+0

WaitKey是OpenCV中的一個重要組成部分:在這方面,作爲同樣的代碼編寫。許多人認爲他們不需要等待擊鍵並忽略它,但是如果沒有它,GUI將不會運行,並且您的窗口將永遠不會顯示。 – Octopus

回答

21

您需要在最後添加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 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() 
+0

此代碼不適用於我。我正在使用Python 2.7。我仍然得到了無效參數的錯誤。 – elaRosca

+0

哪一行顯示你的錯誤? –

+0

這似乎不適用於我,也許opencv已經改變,也許是python。 dir(cv)顯示方法名爲Window()而不是NamedWindow(),並且VideoCapture似乎不是任何地方的方法。 – Mittenchops

1

下面的代碼適用於Python 2.7版和OpenCV有建立蟒蛇2.7

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()