0

私のC ++コードには、2つの画像を比較して静的な背景を削除する関数があります(ややハックですが、私の目的には機能します):

void Keyboard::processBackground( const cv::Mat& img, cv::Mat &foreground )
{
    cv::Mat grey, diff;

    cv::cvtColor( img, grey, CV_RGB2GRAY );

    cv::equalizeHist( grey, grey );

    if ( !initialBackground )
    {
        bg = grey.clone();
        initialBackground = true;
    }
    cv::absdiff( grey, bg, diff );
    cv::threshold( diff, foreground, 75.0, 255, cv::THRESH_BINARY );

    cv::imshow( "foreground", foreground );
    cv::imshow( "background", bg );
}

このコードは、g++-4.5 を使用する Ubuntu で期待どおりに動作しますが、msvc 2010 (express) では、この関数を終了すると (参照によって渡されているにもかかわらず)、フォアグラウンドが設定されていないように見えます。

Windows 8 64 ビットを実行していますが、32 ビット ライブラリに対してコンパイルしています (互換性の理由から)。

このコードをUbuntu 12で広範囲に実行しましたが、期待どおりに実行されました(フォアグラウンドが設定されました)が、msvcでは実行されませんでした。フォアグラウンドをポインターとして渡しても、期待どおりに機能しないようです。

これは既知の癖ですか、msvc の問題ですか、それとも OpenCV 2.4.3 の問題ですか?

4

0 に答える 0