2014-02-14 44 views
0

好吧,好像我的問題之前已經被問過很多次了,不幸的是,沒有人回答。我希望有人會幫助。使用opencv抓取模擬視頻到python

我有一個Easycap設備,可以將來自我的模擬攝像頭的模擬圖像通過USB端口轉換爲數字信號。

設備在「設備管理器」中的「聲音,視頻和遊戲控制器」類別下標識爲「SMI採集卡設備」。

我使用簡單的Python代碼來顯示來自此設備的視頻。我的筆記本電腦也有嵌入式攝像頭。

import numpy as np 
import cv2 
cap = cv2.VideoCapture(0) 

while(True): 
    # Capture frame-by-frame 
    ret, frame = cap.read() 

    # Display the resulting frame 
    cv2.imshow('frame',frame) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 
    if cv2.waitKey(1) & 0xFF == ord('s'): 
     cv2.imwrite('screenshot.jpg',frame) 



# When everything done, release the capture 
cap.release() 
cv2.destroyAllWindows() 

首先,當我拔出Easycap時,CaptureVideo(0)返回嵌入式網絡攝像頭視頻流。然而,當我插上Easycap,出現了一個錯誤:

「回溯(最近最後一次通話): 文件 「C:\用戶\ DELL \桌面\代碼\ cam.py」,10號線,在 CV2 .imshow('frame',frame) 錯誤:...... \ src \ opencv \ modules \ highgui \ src \ window.cpp:261:error:(-215)size.width> 0 & & size。高度> 0「

請注意,除0以外的任何數字都會使程序顯示網絡攝像頭圖像。所以如果我試過cap = cv2.CaptureVideo(1),它會顯示網絡攝像頭,cap = cv2.CaptureVideo(20)是一樣的。

我也嘗試在VideoCapture構造函數中輸入「SMI Grabber Device」而不是0或1,但它沒有任何區別。

我使用的是Windows 8,並且我已經安裝了隨附的Easycap驅動程序。驅動程序附帶的軟件(稱爲ULead)可以正常工作並顯示閉路電視攝像機視頻。我試圖在我關閉該程序時顯示圖像,而沒有,結果是相同的。

我在一個C#程序之前使用了Aforge庫,它有getCamList方法,或者允許我選擇想從comboBox顯示的特定設備。我找不到類似的功能是opencv。

我使用的是OpenCV 2.4.6。我沒有嘗試以前版本的代碼。

我真的需要明白爲什麼這段代碼不工作,知道我只是opencv和圖像處理的初學者。

我希望有人能幫忙。

+0

進一步的研究之後,它似乎是一個OpenCV的錯誤。 http:// stackoverflow。com/questions/8044539/listing-available-devices-in-python-opencv –

+0

你能解決你的問題/修正錯誤嗎? – user391339

回答

2

我使用EasyCAP了。 您必須檢查ret是否爲真。

我用下面的代碼

while True: 
     ret, frame = vc.read() 
     if ret: 
     break 
     cv2.waitKey(10) 
    h, w = frame.shape[:2] 
    print h, w 

    while True: 
     ret, frame = vc.read() 
     if ret: 
     cv2.imshow(WID, frame) 
     if cv2.waitKey(1) == 27: 
     break