msvc 2010 c和x2B的差异+;和gnu c++;(g+;+;-4)在OpenCV 2.4.3中 我在C++代码中有一个函数,它比较两个图像并移除静态背景(有点不真实,但适用于我的目的):

msvc 2010 c和x2B的差异+;和gnu c++;(g+;+;-4)在OpenCV 2.4.3中 我在C++代码中有一个函数,它比较两个图像并移除静态背景(有点不真实,但适用于我的目的):,c++,opencv,pass-by-reference,visual-studio-2010,C++,Opencv,Pass By Reference,Visual Studio 2010,这段代码在Ubuntu和g++-4.5中的工作原理与预期完全相同,但在msvc 2010(express)中,我的前台似乎在退出此函数后就没有设置(即使它是通过引用传递的) 我运行的是64位Windows 8,但基于32位库进行编译(出于兼容性原因) 我已经在Ubuntu12中广泛地运行了这段代码,它按预期运行(前台已设置),但没有在msvc中运行。即使将前景作为指针进行传递,也似乎没有达到预期的效果 这是一个已知的怪癖、msvc的问题还是OpenCV 2.4.3的问题?您可能需要在imshow

这段代码在Ubuntu和g++-4.5中的工作原理与预期完全相同,但在msvc 2010(express)中,我的前台似乎在退出此函数后就没有设置(即使它是通过引用传递的)

我运行的是64位Windows 8,但基于32位库进行编译(出于兼容性原因)

我已经在Ubuntu12中广泛地运行了这段代码,它按预期运行(前台已设置),但没有在msvc中运行。即使将前景作为指针进行传递,也似乎没有达到预期的效果


这是一个已知的怪癖、msvc的问题还是OpenCV 2.4.3的问题?

您可能需要在
imshow
之后的某个地方调用
cv::waitKey
。这种情况确实会发生,只是不在这个函数中。我正在使用带有多个断点的MSVC调试器,但未设置前台数据memeber。您所说的“未设置”到底是什么意思?front.data='',其中数据类型为
char*
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 );
}