0

我的 c++ 代码中有一个函数,可以比较两个图像并删除静态背景(有点骇人听闻,但适用于我的目的):

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