我正在尝试在 OpenCV 2.4.5 上使用 EM 进行背景和前景图像分离。但是,与以前版本的 C 类不同,c++ 对我来说非常混乱,并且由于缺乏文档(从我的观点来看),一些例程相当混乱。
我写了以下代码,但似乎不起作用。它给出了错误,我非常努力地调试但仍然无法正常工作。
Mat image;
image = imread("rose.jpg",1);
Mat _m(image.rows, image.cols, CV_32FC3);
Mat _f(image.rows, image.cols, CV_8UC3);
Mat _b(image.rows, image.cols, CV_8UC3);
Mat sample(image.rows * image.cols, 3, CV_32FC1);
Mat float_image;
image.convertTo(float_image,CV_64F);
Mat background_ = Mat(image.rows * image.cols, 3, CV_64F);
int counter = 0;
//Converting from Float image to Column vector
for (int j = 0; j < image.rows; j++)
{
Vec3f* row = float_image.ptr<Vec3f > (j);
for (int i = 0; i < image.cols; i++)
{
sample.at<Vec3f> (counter++, 0) = row[i];
}
}
//sample.reshape(1,image.rows * image.cols);
cout<<"Training"<<endl;
EM params = EM(2);
params.train(sample);
Mat _means = params.get<Mat>("means");
Mat _weights = params.get<Mat> ("weights");
cout<<"Finished Training"<<endl;
基本上,我将图像转换为 CV_64F 类型的浮点数并将其传递到训练例程中。也许我认为我错了,我可以就我的错误获得帮助。谢谢