我的c ++代码中有一个函数可以比较两个图像并删除一个静态背景(有点hackish,但适用于我的目的):
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 );
}
这段代码与Ubuntu中使用的g ++ - 4.5完全一样,但在msvc 2010(express)中,一旦退出此函数,我的前景似乎没有设置(即使它是通过引用传递的)。
我正在运行Windows 8 64位,但是针对32位库进行编译(出于兼容性原因)。
我已经在Ubuntu 12中广泛运行了这段代码,它按预期运行(前台已设置),但不是在msvc中运行。即使将前景作为指针传递也似乎没有按预期工作。
这是一个已知的怪癖,msvc的问题,还是OpenCV 2.4.3的问题?