我在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