2014-01-22 28 views
1

我正在使用Python cv2模塊來運行程序。外部攝像頭不能用於Opencv和Python

我能夠訪問內置攝像頭,但是當我使用外部攝像頭時,它不起作用。

我已經使用的所有代碼像

VideoCapture(1) # or any other no.s like 0,1,2,3 etc etc. 

我甚至已經禁用使用設備管理器內置的網絡攝像頭。

但沒有用。我正在使用pythonxy。我也在命令提示符下嘗試過。它仍然不起作用。

我收到以下錯誤

runfile('C:/Users/Prashant/Documents/Python Scripts/Circledetection.py',  wdir=r'C:/Users/Prashant/Documents/Python Scripts') 
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in unknown function, file ..\..\..\modules\imgproc\src\color.cpp, line 3402 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 540, in runfile 
    execfile(filename, namespace) 
    File "C:/Users/Prashant/Documents/Python Scripts/Circledetection.py", line 27, in <module> 
    prev_gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY) 
cv2.error: ..\..\..\modules\imgproc\src\color.cpp:3402: error: (-215) scn == 3 || scn == 4 
+0

錯誤只是表明您的圖像是空的(因爲捕捉未打開。)嘗試爲您的外部攝像頭安裝正確的驅動程序。 – berak

+0

我能夠使用從win8相機應用程序的網絡攝像頭..當我檢查從設備管理器更新驅動程序,它顯示「Windows已確定您的設備的驅動程序軟件是最新的」。 –

回答

0

這種說法意味着,你的形象沒有3(RGB,BGR等)通道或4個通道(3個通道+字母)。顯然,這可能是由於根本不存在圖像造成的。

儘管這可能是因爲您的相機無法正常工作,但您的相機在第一次讀取()時不會提供可用的相框,因爲它本身仍在「準備」。

最簡單的方法來解決這個問題,假設你使用類似 retv, frame = cam.read() 是檢查if frame:if retv:

如果沒有圖像,是否跳過處理,並且在幾幀內應該有可讀的輸入。

0

您確定您使用的是正確的索引嗎?使用Videocapture您也可以嘗試使用Videocapture(-1),因爲外部凸輪有時會顯示爲輸入列表中的最後一個元素。 Videocapture也可以返回設備名稱,因此您可以嘗試循環輸入設備索引列表並打印它們的「友好名稱」,以確保您使用的是正確的名稱。

0

您提到VideoCapture(0)VideoCapture(1)
「1」表示外部攝像機號碼。

import numpy as np import cv2 

cap = cv2.VideoCapture(1) 
while(1): 
    ret, frame = cap.read() 
    #print(height) 
    #cv2.imshow("Cropped Image", crop_img) 
    #gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
    cv2.imshow('frame',frame) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

cap.release() cv2.destroyAllWindows()