Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV 2.4.6.1:从摄像机抓取帧时出错_C++_Xcode_Opencv_Osx Mountain Lion - Fatal编程技术网

C++ OpenCV 2.4.6.1:从摄像机抓取帧时出错

C++ OpenCV 2.4.6.1:从摄像机抓取帧时出错,c++,xcode,opencv,osx-mountain-lion,C++,Xcode,Opencv,Osx Mountain Lion,我在OpenCV中使用XCode(OS X Mountain Lion)。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 &l

我在OpenCV中使用XCode(OS X Mountain Lion)。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;
}
使用名称空间cv;
int main(int argc,const char*argv[]
{
垫架;
视频捕获上限(CV_cap_ANY);
如果(!cap.isOpened())
{
标准:cerr>框架;
if(frame.empty())
{
标准:cerr=0)
{
释放帽();
std::cout 0)在imshow中,文件/tmp/default-mebu/opencv-2.4.6.1/modules/highgui/src/window.cpp,第261行

libc++abi.dylib:terminate调用引发异常 (lldb)

我认为我的程序没有正确地访问相机。它不知何故无法获取数据

我知道Linux有一些问题,但我认为这些问题已经解决了,我不确定它们是如何影响OSX的

有人知道我的问题的解决办法吗

编辑:

因此,我找到了一个解决方案。我为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;
}
try
{
     imshow("webcam", frame);
}
catch (Exception& e)
{
    const char* err_msg = e.what();
    std::cout << "exception caught: imshow:\n" << err_msg << std::endl;
}
试试看
{
imshow(“网络摄像头”,框架);
}
捕获(例外和e)
{
const char*err_msg=e.what();
函数imshow中的std::cout 0&&size.height>0

VideoCapture(CV_cap_ANY);
Sleep(1000);//等待摄像机的响应,别忘了包括

我遇到了类似的问题。您可以添加类似的代码,也许可以解决它。因为捕获大小会导致此问题

VideoCapture cap;
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480); 
然后


因此,我找到了一个解决方法。我为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;
}
try
{
     imshow("webcam", frame);
}
catch (Exception& e)
{
    const char* err_msg = e.what();
    std::cout << "exception caught: imshow:\n" << err_msg << std::endl;
}
试试看
{
imshow(“网络摄像头”,框架);
}
捕获(例外和e)
{
const char*err_msg=e.what();

这是一个已知的问题,显然他们正试图在下一版本中修复它。现在,我只使用2.4.5(如果您以前使用过自制软件,那么您可以使用
brew开关opencv 2.4.5
返回到它。windows.h windows操作系统是否特定?我使用的是OS X。此外,我从网络摄像头得到了响应,它有时会给出一个错误,好像帧不包含任何数据。我仍然会收到相同的错误。您是否使用cap.read(图像)而不是cap>>图像?