Как подавить сообщение об ошибке OpenCV

Я пишу проект OpenCV, используя g++ и opencv 2.4.6

у меня есть такой код:

try 
{
    H = findHomography( obj, scene, CV_RANSAC );
}
catch (Exception &e)
{
    if (showOutput)
        cout<< "Error throwed when finding homography"<<endl;
    errorCount++;
    if (errorCount >=10)
    {
        errorCount = 0;
        selected_temp = -99;
        foundBB = false;
        bb_x1 = 0;
        bb_x2 = 0;
        bb_y1 = 0;
        bb_y2 = 0;
    }
    return -1;
}

ошибка будет выброшена, когда findHomography не удалось найти вещи. Сообщение об ошибке включает в себя:

OpenCV Error: Assertion failed (npoints >= 0 && points2.checkVector(2) 
== npoints && points1.type() == points2.type()) in findHomography, 
file /Users/dji-mini/Downloads/opencv- 2.4.6/modules/calib3d/src/fundam.cpp, 
line 1074
OpenCV Error: Assertion failed (count >= 4) in cvFindHomography, 
file /Users/dji-mini/Downloads/opencv-2.4.6/modules/calib3d/src/fundam.cpp, line 235

поскольку я знаю, при каких условиях появится сообщение, Я хочу подавить эти сообщения об ошибках. Но я не знаю как это сделать.

в старой версии OpenCV, похоже, есть "cvSetErrMode", который, согласно другие статьи, амортизируется в OpenCV 2.Х. Итак, какую функцию я могу использовать для подавления сообщений об ошибках OpenCV?

1 ответов


cv::error() вызывается при каждом возникновении ошибки утверждения. Поведение по умолчанию-печать оператора утверждения в std::cerr.

вы можете использовать недокументированные cv::redirectError() функция для установки пользовательского обратного вызова обработки ошибок. Это переопределит поведение по умолчанию cv::error(). Сначала необходимо определить пользовательскую функцию обработки ошибок:

int handleError( int status, const char* func_name,
            const char* err_msg, const char* file_name,
            int line, void* userdata )
{
    //Do nothing -- will suppress console output
    return 0;   //Return value is not used
}

а затем установите обратный вызов перед кодом, который бросает:

    cv::redirectError(handleError);

try {
    // Etc...

если в какой-либо укажите, что вы хотите восстановить поведение по умолчанию, вы можете сделать это:

cv::redirectError(nullptr);    //Restore default behavior; pass NULL if no C++11