我在windows 7,32位操作系統上的visual studio 2012 express上使用openCV 2.4.10。OpenCV C++攝像頭圖像未保存到矩陣
我創建了一個函數,用於初始化攝像頭,拍攝圖像並將其存儲在矩陣中,然後返回圖像矩陣。
Mat frameCapture()
{
Mat srcCap;
//initializes structure type of cap
VideoCapture cap(0);
if(!cap.isOpened())
{
//check for camera
cout << "No camera detected" << endl;
waitKey(10);
}
//stores next frame into matrix
cap >> srcCap;
//check to see the camera took a picture
if(srcCap.empty())
{
cout << "no data in image\n";
}
//return the image matrix
cap.release();
return srcCap;
}
int main()
{
Mat src;
src = frameCapture();
imshow (window1, src);
waitKey(0);
}
所以運行程序時,它會說「圖像無數據」意味着srcCap.empty()返回true,然後它會拋出斷言錯誤的imshow功能。但是,程序有時會運行併成功返回圖像。此外,當我將函數併入圖像處理的循環中時,它有時會拍攝幾張照片,然後隨機吐出「圖像中沒有數據」並拋出相同的斷言錯誤,或者根本不會拍攝第一張照片並吐出「圖像中沒有數據」,並拋出相同的斷言錯誤。每次檢測到照相機並打開蓋子;代碼從來沒有說「沒有相機檢測」
我的問題是什麼導致帽>> srcCap無法正常工作,這是硬件問題?我使用的相機是一個USB 2.0可插拔顯微鏡。
如果您捕獲多個幀(例如, 'for(int i = 0; i <5; ++ i)cap >> srcCap;'?仍然是空的? – nils 2015-04-02 20:46:15
我還沒有嘗試過,我認爲這個問題可能與相機上的CMOS傳感器對光線不如CCD傳感器敏感有關。但將其嵌套在for循環中以拍攝多張照片可能會解決問題。我會看看! – jschnitz1 2015-04-02 21:57:22
所以它解決了這個問題,我做到了,而不必通過在函數中創建布爾值並使用while循環來設置有限的嘗試次數,在每次捕獲之後檢查srcCap.empty(),並且如果它是成功的,而不是切換布爾值值,也許應該增加一個上限,所以它不會卡在無限循環中。 – jschnitz1 2015-04-02 22:59:28