我正在使用 XCode(OS X Mountain Lion)和 OpenCV。OpenCV 是通过自制软件安装的(版本 2.4.6.1)
我的程序应该只访问相机。
到目前为止,这是我的代码:
using namespace cv;
int main(int argc, const char * argv[])
{
Mat frame;
VideoCapture cap(CV_CAP_ANY);
if (!cap.isOpened())
{
std::cerr << "Webcam error. Was not able to open webcam!\n";
exit(1);
}
namedWindow("webcam", CV_WINDOW_AUTOSIZE);
while (cap.isOpened())
{
cap >> frame;
if (frame.empty())
{
std::cerr << "Frame data error.\n";
}
imshow("webcam", frame);
if(waitKey(50) >= 0)
{
cap.release();
std::cout << "Webcam closed.\n";
}
}
std::cout << "The Program has finished.";
return 0;
}
但我得到了输出:
帧数据错误。
OpenCV 错误:imshow 中的断言失败 (size.width>0 && size.height>0),文件 /tmp/default-mebu/opencv-2.4.6.1/modules/highgui/src/window.cpp,第 261 行
libc++abi.dylib:终止调用抛出异常(lldb)
我认为我的程序没有正确访问相机。它以某种方式无法获取数据。
我知道 Linux 存在一些问题,但我认为它们已得到修复,我不确定它们如何影响 OS X。
有人知道我的问题的解决方案吗?
编辑:
所以我找到了解决方案。我为 imshow 添加了 try {} catch {}。现在我的程序在点击 imshow 时不会退出。相反,它只是通过一个错误并保持 while 循环运行。它错过了几帧,但仍然足以维持良好的视频流。
try
{
imshow("webcam", frame);
}
catch (Exception& e)
{
const char* err_msg = e.what();
std::cout << "exception caught: imshow:\n" << err_msg << std::endl;
}
抛出的错误仍然是相同的:
帧数据错误。
OpenCV 错误:imshow 中的断言失败 (size.width>0 && size.height>0),文件 /tmp/default-mebu/opencv-2.4.6.1/modules/highgui/src/window.cpp,第 261 行
捕获的异常:imshow:/tmp/default-mebu/opencv-2.4.6.1/modules/highgui/src/window.cpp:261:错误:(-215) size.width>0 && size.height>0 in function imshow