opencv 用cvPryMeanShiftFiltering做图像分割,想将分块后每个区域设置个标签 生成一个label的mat 怎么做

如题所述

第1个回答  推荐于2016-10-24
刚好我写了类似的代码,但是我用的是 pyrMeanShiftFiltering() 这个函数,可能会稍有些不同。我把我的整个函数放在下面,你自己看下:
void meanShiftSegmentation(cv::Mat &firstImage, cv::Mat &secondImage, cv::Mat &overlapSegmentsResults)
{
int imageHeight = firstImage.rows;
int imageWidth = firstImage.cols;

cv::Mat firstResults;
cv::pyrMeanShiftFiltering(firstImage, firstResults,10,10);
cv::Mat secondResults;
cv::pyrMeanShiftFiltering(secondImage, secondResults,10,10);

cv::Mat mask(imageHeight+2, imageWidth+2, CV_8UC1, cv::Scalar(0));
uchar* maskData = mask.data;
RNG rng=theRNG();
for (int i = 0 ; i < imageHeight ; i++)
{
for (int j = 0 ; j < imageWidth ; j++)
{
if (maskData[(i+1)*imageWidth + j+1] == 0)
{
Scalar newcolor(rng(255),rng(255),rng(255));
floodFill(firstResults,mask,Point(j,i),newcolor,0,Scalar::all(1),Scalar::all(1));
}
}
}
mask.setTo(0);
for (int i = 0 ; i < imageHeight ; i++)
{
for (int j = 0 ; j < imageWidth ; j++)
{
if (maskData[(i+1)*imageWidth + j+1] == 0)
{
Scalar newcolor(rng(255),rng(255),rng(255));
floodFill(secondResults,mask,Point(j,i),newcolor,0,Scalar::all(1),Scalar::all(1));
}
}
}

imwrite("E:\\firstMeanShift.png",firstResults);
imwrite("E:\\secondMeanShift.png",secondResults);
}本回答被提问者和网友采纳
相似回答