【发布时间】:2015-04-02 20:03:34
【问题描述】:
我在 Visual Studios 2012 Express 上使用 openCV 2.4.10 用于 Windows 7、32 位操作系统的桌面。
我创建了一个函数来初始化网络摄像头,获取图像并将其存储在矩阵中,然后返回图像矩阵。
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 函数抛出一个断言错误。但是,该程序有时会运行并成功返回图像。此外,当我将函数合并到一个循环中进行图像处理时,它有时会拍几张照片,然后随机吐出“图像中没有数据”并抛出相同的断言错误,或者根本不会拍第一张照片并吐出“图像中没有数据”,抛出相同的断言错误。每次都检测到摄像头,开盖;代码从不说“未检测到摄像头”
我的问题是什么导致 cap >> srcCap 不起作用,是硬件问题吗?我使用的相机是 USB 2.0 可插拔显微镜。
【问题讨论】:
-
如果您捕获多于一帧会发生什么,例如
for (int i=0; i<5; ++i) cap >> srcCap;?还是空的? -
我没有尝试过,我认为问题可能与相机上的 CMOS 传感器对光的敏感性不如 CCD 传感器有关。但是将其嵌套在 for 循环中以拍摄多张照片可能会解决问题。我去看看!
-
所以它解决了这个问题,我没有通过在函数中创建一个布尔值并使用一个while循环来设置有限数量的尝试,在每次捕获后检查 srcCap.empty() 并且如果它比切换布尔值成功,应该也应该添加一个上限,这样它就不会陷入无限循环。
标签: c++ opencv video-capture