Как подавить сообщение об ошибке 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