我正在使用XCode(OS X Mountain Lion)和OpenCV。 OpenCV通过自制程序(版本2.4.6.1)安装
我的程序应该只能访问相机。
这是我的代码sofar:
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的错误:断言失败(size.width大于0&安培;&安培; size.height大于0)中imshow,文件/tmp/default-mebu/opencv-2.4.6.1/modules/highgui/src/window.cpp ,第261行
libc ++ abi.dylib:terminate调用抛出异常 (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的错误:断言失败(size.width大于0&安培;&安培; size.height大于0)中imshow,文件/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&gt; 0&amp;&amp;函数imshow中的size.height&gt; 0
答案 0 :(得分:0)
VideoCapture cap(CV_CAP_ANY);
Sleep(1000); // Wait for response of camera, don't forget to #include <windows.h>
答案 1 :(得分:0)
我有类似的问题。你可以添加类似的代码,也许解决它。因为捕获大小会导致此问题
VideoCapture cap;
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
然后
cap.read(image);
答案 2 :(得分:0)
所以我找到了一个解决方法。我为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;
}