13

我试图得到opencv的错误!说我有这个程序:

#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>

int main (){
    cv::Mat frame;
    cv::VideoCapture cap(1); // I don't have a second videoinput device! 
    int key = 0; 

    while(key !=27){
        cap >> frame;
        cv::imshow("frame",frame);
        key = cv::waitKey(10);
    }

    cap.release();
    return 0;
}

当我运行这个程序时,我在控制台中收到这条消息:

OpenCV Error: Assertion failed (size.width>0 && size.height>0) in unknown functi
on, file ..\..\..\opencv\modules\highgui\src\window.cpp, line 261

我的问题是如何获取此消息并将其保存在字符串中以处理我收到的每个错误!如果有可能逃脱程序崩溃!

提前致谢!

4

2 回答 2

26

它使用 C++ 异常。有关更多信息,请参见文档中的此处

try
{
    ... // call OpenCV
}
catch( cv::Exception& e )
{
    const char* err_msg = e.what();
    std::cout << "exception caught: " << err_msg << std::endl;
}

OpenCV 代码中的ACV_Assert是调用 OpenCV 函数的宏error。该功能可以在这里看到。除非您没有customErrorCallback设置,否则它将始终在 stderr 上打印错误文本。您可以通过 执行此操作cvRedirectError,请参见此处

于 2013-10-21T07:39:20.793 回答
-1

您必须检查代码中的 OpenCV 函数调用是否成功执行。然后你就可以理解确切的问题了。这是修改后的代码。

int main (){
    cv::Mat frame;
    cv::VideoCapture cap(1); // I don't have a second videoinput device! 

    if ( !cap.isOpened() )  // if not success, exit program
    {
         cout << "Cannot open the video cam" << endl;
         return -1;
    }

    int key = 0; 

    while(key !=27){
        bool bSuccess = cap.read(frame); // read a new frame from video

         if (!bSuccess) //if not success, break loop
        {
            cout << "Cannot read the frame from video cam" << endl;
            break;
        }
        cv::imshow("frame",frame);
        key = cv::waitKey(10);
    }

    cap.release();
    return 0;
}
于 2013-10-21T07:51:24.107 回答