12

g++ と opencv 2.4.6 を使用して OpenCV プロジェクトを作成しています。

次のようなコードがあります。

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の古いバージョンでは、他の記事によると、OpenCV 2.Xで減価償却されている「cvSetErrMode」があるようです。では、OpenCV のエラー メッセージを抑制するには、どの関数を使用すればよいでしょうか?

4

1 に答える 1

18

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
于 2013-07-10T16:06:17.107 に答える