2013-10-21 73 views
4

我試圖得到opencv的錯誤!說我有這個程序:在c + +中獲取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 

我的問題是我怎麼能得到這個消息,並將其保存在每一個字符串我得到的錯誤! ,如果它有可能逃脫程序崩潰!

在此先感謝!

回答

11

它使用C++異常。有關更多信息,請參閱文檔中的here

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

在OpenCV的碼A CV_Assert是它調用OpenCV的功能error的宏。該功能可以看到here。除非您沒有設置customErrorCallback,否則它將始終在stderr上打印錯誤文本。你可以通過cvRedirectError來完成,見here

+0

感謝您的回答!它的工作原理,有無論如何禁止錯誤消息的輸出波紋管? – Engine

+0

只要刪除'std :: cout'?您可以將其放入文件中。 – Albert

+0

不,它不工作!輸出發生在cv :: imshow()中,因爲幀指向NULL值 – Engine

0

您必須檢查代碼中的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; 
} 
+0

問題是沒有得到程序運行,但有一種方法來保存opencv錯誤消息 – Engine