初學OpenCV,淘寶80左右買了個480P的usb工業攝像頭,迫不及待地接上筆記本,
——嚯,比顯示屏上面自帶雪花的攝像頭好多了
再up2開發板上跑最簡單的OpenCV攝像頭捕獲例程,也是正常顯示。然而當再接上筆記本用visual studio跑的時候,自帶攝像頭正常,而usb攝像頭卻報錯
OpenCV Error: Assertion failed
查資料也查不出個所以然來(VS和OpenCV都是剛摸幾天- -)。
最初以為是usb攝像頭的device編號不匹配,去查獲取device編號的方法,網上的結果復雜至極令小白我毫無頭緒。
沒辦法一步一步來吧。然后發現問題似乎出在imshow()這一行。大概是攝像頭從打開到正常傳輸數據速度不夠快,最初imshow()都不到數據,就直接報錯了。偶然查到Mat::empty()可以判斷是否為空,於是把這個判斷加在imshow()之前,果然成功運行。
另外發現VideoCapture這一行,插入USB攝像頭后dev隨機分配,電腦重新啟動前都是按這個dev編號。在下次開機后可能就和這次編號又不同了,需要注意。
#include "stdafx.h" #include <opencv2\opencv.hpp> using namespace cv; using namespace std; int main() { Mat frame; //讀取視頻或攝像頭 VideoCapture capture(0); while (true) { capture >> frame; if(!frame.empty()){ imshow("window",frame); } // imshow("讀取視頻", frame); if(waitKey(30) == 27) //延時30
break;
} return 0; }
需要加入按鍵保存當前幀,可以插入以下代碼:
if (waitKey(30) == 'p') { sprintf(image_name, "..\\img\\%s%d%s", "image", ++num, ".jpg"); imwrite(image_name, frame); }