2017-05-03 447 views
0

系統參數:Windows 8.1,Python 2.7.13,OpenCV 3.2.0.7Python OpenCV給攝像頭上的黑屏捕獲

此代碼工作正常。我試過的.avi和.mp4視頻:

import numpy as np 
import cv2 
import time 

cap = cv2.VideoCapture('tmp.avi') 

while(True): 
    ret, frame = cap.read() 

    cv2.imshow('frame',frame) 
    if cv2.waitKey(1) & 0xFF == 27: 
     break 

cap.release() 
cv2.destroyAllWindows() 

但是,當我試圖從網絡攝像頭的畫面,我總是看到黑屏雖然RET爲真:

import numpy as np 
import cv2 
import time 

cap = cv2.VideoCapture(0) 

while(True): 
    ret, frame = cap.read() 

    if not ret: continue 

    cv2.imshow('frame',frame) 
    if cv2.waitKey(1) & 0xFF == 27: 
     break 

cap.release() 
cv2.destroyAllWindows() 

我試圖用搶和檢索方法,而不是讀法,所以搶返回True,但檢索返回RET =假:

import numpy as np 
import cv2 
import time 

cap = cv2.VideoCapture(0) 

while(True): 
    if not cap.grab(): break 
    ret, frame = cap.retrieve() 
    if not ret: continue 

    cv2.imshow('frame',frame) 
    if cv2.waitKey(1) & 0xFF == 27: 
     break 

cap.release() 
cv2.destroyAllWindows() 

末代碼工作正常視頻。

Windows相機軟件工作正常,所以網絡攝像頭是好的。

我試圖重新安裝OpenCV,它沒有幫助。

什麼問題?爲什麼檢索方法返回False雖然讀取方法返回True?

+1

你確定'cv2.VideoCapture(0)'是你的攝像頭嗎? '可以嘗試'cv2.VideoCapture(1)' –

+0

我確定它是0 – Sergey

+0

您可以嘗試'print {} x {}「。format(cap.get(3),cap.get(4))'寬度和高度來查看它是否有效。 –

回答

0

我遇到了同樣的問題。

嘗試卸載並重新安裝相機驅動程序。

我不知道爲什麼,但它爲我工作。