如标题,又说回分水岭。
分水岭的源码分析可参考OpenCV 源码中分水岭算法 watershed 函数源码注解_Endless_91的博客-CSDN博客_watershed源码这个博主。
然后我写了下流程,然后自己按以下流程实现了一下放在这个链接,结果与原cv版本的watershed结果一模一样,证明流程理解正确。 https://download.csdn.net/download/wd1603926823/85236860:
而对于我的应用,不是彩图,是二值图,所以只能如下去构造。
connectedComponents(peak_image, imglabels);
imglabels.convertTo(imglabels, CV_32SC1);
///分水岭分割
vector<Mat> resultmats;
Mat binary_8UC3;
resultmats.push_back(realsingleimg);
resultmats.push_back(realsingleimg);
resultmats.push_back(realsingleimg);
merge(resultmats,binary_8UC3);
Mat unknown;//得到未知区域 即分界线的划分涉及区域
bitwise_xor(realsingleimg,peak_image,unknown);
imglabels.forEach<int>(
[&unknown](int &pixel, const int *position) -> void
{
pixel+=100;
if((unknown.ptr<uchar>(position[0])[position[1]])>0)
{
pixel=0;
}
}
);
watershed(binary_8UC3, imglabels);///分水岭分割结束
这样的后果就是过分割严重,想着用下面的轴相似来抑制极大值。但是鲁棒性并没有我之前传的那一版本好。
/*
*float mergedistanceth:每两个中心点 每个轴之间的距离差阈值,小于此阈值则是相似轴。越小相似轴越少,则合并的点越少
*float similarratio:相似轴占所有轴的比例,大于此阈值则合并。越小合并的点越多。
* */
void peakNMSuppress(Mat objbw,vector<Point> origipeaks,float mergedistanceth,float similarratio,vector<Point> &mergepeaks)
{
int origipeaksnum=origipeaks.size();
vector<PEAKINFO> peaksaxises;
for(int ptid=0;ptid!=origipeaksnum;ptid++)
{
PEAKINFO tmppeakinfo;
tmppeakinfo.peak=origipeaks[ptid];
tmppeakinfo.proceeded=0;
//得到每个peak的四个轴
getAxisLengths(objbw,origipeaks[ptid],tmppeakinfo.axises);
peaksaxises.push_back(tmppeakinfo);
}
//对每个点的特征进行判断,极度相似的才是需要合并的
for(int peakid=0;peakid!=peaksaxises.size();peakid++)
{
if(peaksaxises[peakid].proceeded)
continue;
Vec4b currentpeakinfo=peaksaxises[peakid].axises;
vector<Point> tmpmerged;
tmpmerged.push_back(peaksaxises[peakid].peak);
peaksaxises[peakid].proceeded=1;
for(int compareid=peakid+1;compareid!=peaksaxises.size();compareid++)
{
if(peaksaxises[compareid].proceeded)
continue;
Vec4b comparepeakinfo=peaksaxises[compareid].axises;
float similarcount=0.0f;
for(int id=0;id!=4;id++)
{
float similardegree=abs(currentpeakinfo.val[id]-comparepeakinfo.val[id]);
if(similardegree<mergedistanceth)
{
similarcount += 1;
}
}
similarcount /= 4;//表示极度相似的轴的比例
if(similarcount>=similarratio)
{
peaksaxises[compareid].proceeded=1;
tmpmerged.push_back(peaksaxises[compareid].peak);
}
}
int similarpeaksnum=tmpmerged.size();
if(similarpeaksnum==1)
{
mergepeaks.push_back(tmpmerged[0]);
}
else
{
//merge many peak points...
float xsum=tmpmerged[0].x,ysum=tmpmerged[0].y;
for(int pid=1;pid!=similarpeaksnum;pid++)
{
xsum += tmpmerged[pid].x;
ysum += tmpmerged[pid].x;
}
Point mergedpeak(xsum/similarpeaksnum,ysum/similarpeaksnum);
mergepeaks.push_back(mergedpeak);
}
}
}
//得到每个peak的四个轴
void getAxisLengths(Mat objbw,Point peakpt,Vec4w &axislengths)
{
int rows=objbw.rows;
int cols=objbw.cols;
//0 degree...水平
axislengths.val[0]=1;
int r=peakpt.y;
//left...
for(int c=peakpt.x-1;c>-1;c--)
{
if(objbw.ptr<uchar>(r)[c]!=0)
{
(axislengths.val[0])++;
}
else
break;
}
//right...
for(int c=peakpt.x+1;c!=cols;c++)
{
if(objbw.ptr<uchar>(r)[c]!=0)
{
(axislengths.val[0])++;
}
else
break;
}
//90 degree...垂直
axislengths.val[1]=1;
int c=peakpt.x;
//up...
for(r=peakpt.y-1;r>-1;r--)
{
if(objbw.ptr<uchar>(r)[c]!=0)
{
(axislengths.val[1])++;
}
else
break;
}
//bottom...
for(r=peakpt.y+1;r!=rows;r++)
{
if(objbw.ptr<uchar>(r)[c]!=0)
{
(axislengths.val[1])++;
}
else
break;
}
//45 degree...
axislengths.val[2]=1;
c=peakpt.x;
r=peakpt.y;
//up...
for(r=peakpt.y-1;r>-1;r--)
{
for(c=peakpt.x+1;c!=cols;c++)
{
if(objbw.ptr<uchar>(r)[c]!=0)
{
(axislengths.val[2])++;
}
else
break;
}
}
c=peakpt.x;
r=peakpt.y;
//down...
for(r=peakpt.y+1;r!=rows;r++)
{
for(c=peakpt.x-1;c>-1;c--)
{
if(objbw.ptr<uchar>(r)[c]!=0)
{
(axislengths.val[2])++;
}
else
break;
}
}
//135 degree...
axislengths.val[3]=1;
c=peakpt.x;
r=peakpt.y;
//up...
for(r=peakpt.y-1;r>-1;r--)
{
for(c=peakpt.x-1;c>-1;c--)
{
if(objbw.ptr<uchar>(r)[c]!=0)
{
(axislengths.val[3])++;
}
else
break;
}
}
c=peakpt.x;
r=peakpt.y;
//down...
for(r=peakpt.y+1;r!=rows;r++)
{
for(c=peakpt.x+1;c!=cols;c++)
{
if(objbw.ptr<uchar>(r)[c]!=0)
{
(axislengths.val[3])++;
}
else
break;
}
}
}
还是没有overlap-segmentation.zip_peak_local_max-其它文档类资源-CSDN下载 这个链接里的效果好。
~~~~~~~~~~~~~~~~~~~以下是用cv::watershed()时遇到过的一次奇怪问题~~~~~~~~~~~~~~~~~~~
今天突然发现opencv的cv::watershed()出现一个问题:
vector<Mat> resultmats;
Mat binary_8UC3;
resultmats.push_back(rectbw);
resultmats.push_back(rectbw);
resultmats.push_back(rectbw);
merge(resultmats, binary_8UC3);
Mat unknown;
bitwise_xor(rectbw, peak_dilate, unknown);
// imwrite("obj_rectbw.png",rectbw);
// imwrite("obj_peak_dilate.png",peak_dilate);
// imwrite("obj_unknown.png",unknown);
Mat imglabels;
connectedComponents(peak_dilate, imglabels);
imglabels.convertTo(imglabels, CV_32SC1);
imglabels.forEach<int>(
[&unknown](int &pixel, const int *position) -> void
{
pixel+=100;
if(unknown.ptr<uchar>(position[0])[position[1]]==255)
{
pixel=0;
}
}
);
for(int r=0;r!=imglabels.rows;r++)
{
for(int c=0;c!=imglabels.cols;c++)
{
int tmp=imglabels.ptr<int>(r)[c];
cout<<tmp/100+tmp%100<<" ";
}
cout<<endl;
}
cout<<endl<<endl;
//发现这里有漏掉的,即使unknown标记了是目标点区域,但watershed就是丢掉了一部分
watershed(binary_8UC3, imglabels);
for(int r=0;r!=imglabels.rows;r++)
{
for(int c=0;c!=imglabels.cols;c++)
{
int tmp=imglabels.ptr<int>(r)[c];
cout<<tmp/100+tmp%100<<" ";
}
cout<<endl;
}
cout<<endl<<endl;
正常来说,上面的打印应该如下所示,即0表示opencv watershed需要生长的地方,应该生长为分割出的不同连通域的标记:
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 0 2 2 0 0 0 0 0 0 3 0 0 0 1 1
1 1 1 1 1 2 2 2 2 2 2 0 0 0 3 3 3 0 1 1 1
1 1 1 1 2 2 2 2 2 2 2 2 0 0 0 3 0 1 1 1 1
1 1 1 0 2 2 2 2 2 2 2 2 0 0 0 0 1 1 1 1 1
1 1 0 2 2 2 2 2 2 2 2 2 2 0 0 1 1 1 1 1 1
1 0 0 0 2 2 2 2 2 2 2 2 0 0 0 1 1 1 1 1 1
0 0 0 0 2 2 2 2 2 2 2 2 0 0 1 1 1 1 1 1 1
0 0 0 0 0 2 2 2 2 2 2 0 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 2 2 0 0 0 0 1 1 1 1 1 1 1 1
1 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 1 1 1 1 1
1 1 1 1 0 0 0 2 2 2 0 0 0 0 0 0 1 1 1 1 1
1 1 1 1 1 1 1 1 2 0 0 0 0 0 0 0 1 1 1 1 1
1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1
1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1
1 1 1 1 1 1 1 1 0 0 1 0 0 1 1 1 1 1 1 1 1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 3 3 3 -1
-1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 3 3 3 3 -1
-1 1 1 1 1 1 1 1 1 1 1 1 1 -1 3 3 3 3 3 3 -1
-1 1 1 1 1 1 1 1 1 1 1 -1 -1 3 3 3 3 3 3 3 -1
-1 1 1 1 1 1 1 1 1 -1 -1 2 -1 3 3 3 3 3 3 3 -1
-1 1 1 1 1 1 1 1 -1 2 2 2 -1 3 3 3 3 3 3 -1 -1
-1 1 1 1 1 1 -1 2 2 2 2 2 -1 3 3 3 3 3 -1 1 -1
-1 1 1 1 1 2 2 2 2 2 2 2 -1 3 3 3 3 -1 1 1 -1
-1 1 1 1 2 2 2 2 2 2 2 2 2 -1 3 3 -1 1 1 1 -1
-1 1 1 -1 2 2 2 2 2 2 2 2 2 -1 3 -1 1 1 1 1 -1
-1 1 -1 2 2 2 2 2 2 2 2 2 2 2 -1 1 1 1 1 1 -1
-1 -1 2 2 2 2 2 2 2 2 2 2 2 2 -1 1 1 1 1 1 -1
-1 2 2 2 2 2 2 2 2 2 2 2 -1 -1 1 1 1 1 1 1 -1
-1 2 2 2 2 2 2 2 2 2 2 -1 1 1 1 1 1 1 1 1 -1
-1 -1 2 2 2 2 2 2 2 2 2 2 -1 1 1 1 1 1 1 1 -1
-1 1 -1 -1 2 2 2 2 2 2 2 2 2 -1 -1 1 1 1 1 1 -1
-1 1 1 1 -1 -1 -1 2 2 2 2 2 2 2 2 -1 1 1 1 1 -1
-1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 -1 1 1 1 1 -1
-1 1 1 1 1 1 1 -1 2 2 2 2 2 2 2 2 -1 1 1 1 -1
-1 1 1 1 1 1 -1 2 2 2 2 2 2 2 2 2 -1 1 1 1 -1
-1 1 1 1 1 1 -1 2 2 2 2 2 2 2 2 2 -1 1 1 1 -1
-1 1 1 1 1 1 -1 2 2 2 2 2 2 2 2 2 -1 1 1 1 -1
-1 1 1 1 1 1 -1 2 2 2 2 2 2 2 2 2 -1 1 1 1 -1
-1 1 1 1 1 1 1 -1 2 2 2 2 2 2 2 -1 1 1 1 1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 0 0 0 0 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 0 0 2 2 2 2 2 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 3 3 0 0 1 1 1 1
0 0 0 2 2 2 2 2 2 2 2 2 0 0 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 0 1 1
0 0 0 2 2 2 2 2 2 2 2 2 0 0 1 1 1 1 1 1 1 1 1 1 0 3 3 3 3 3 3 3 3 3 3 0 1
1 0 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 0 0 3 3 3 3 3 3 3 3 3 3 3 3 0
1 0 0 2 2 2 2 2 2 2 2 2 0 1 1 1 1 1 1 1 1 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 0
1 0 0 2 2 2 2 2 2 2 2 2 0 1 1 1 1 1 1 1 1 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 0
1 0 1 0 0 2 2 2 2 2 0 0 1 1 1 1 1 1 1 1 1 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3
1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0
1 1 1 1 1 1 1 1 1 0 0 0 4 4 4 4 0 0 1 1 1 1 0 3 3 3 3 3 3 3 3 3 3 3 3 3 0
1 1 1 1 1 1 1 1 1 0 4 4 4 4 4 4 4 4 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 3 0
1 1 1 1 1 1 1 1 0 4 4 4 4 4 4 4 4 4 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 3 3 1 1
1 1 1 1 1 1 1 1 0 4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 3 3 3 3 3 3 3 3 3 3 1 1 1
1 1 1 1 1 1 1 1 4 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 3 3 3 3 3 3 3 1 1 1 1 1
1 1 1 1 1 1 1 1 0 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 3 0 0 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0 4 4 4 4 4 4 4 4 0 0 0 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0 0 0 4 4 4 4 0 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 1 1 1 -1 2 2 -1 1 -1 2 2 2 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 1 -1 2 2 2 2 2 2 2 2 2 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 3 3 -1 -1 1 1 1 -1
-1 -1 -1 2 2 2 2 2 2 2 2 2 2 -1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 -1 1 -1
-1 2 2 2 2 2 2 2 2 2 2 2 2 -1 1 1 1 1 1 1 1 1 1 1 -1 3 3 3 3 3 3 3 3 3 3 -1 -1
-1 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 -1 -1 3 3 3 3 3 3 3 3 3 3 3 3 -1
-1 2 2 2 2 2 2 2 2 2 2 2 -1 1 1 1 1 1 1 1 1 -1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -1
-1 2 -1 2 2 2 2 2 2 2 2 2 -1 1 1 1 1 1 1 1 1 -1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -1
-1 -1 1 -1 -1 2 2 2 2 2 2 -1 1 1 1 1 1 1 1 1 1 -1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -1
-1 1 1 1 1 1 1 1 -1 2 -1 -1 1 1 1 1 1 1 1 1 1 -1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -1
-1 1 1 1 1 1 1 1 1 -1 4 4 4 4 4 4 -1 -1 1 1 1 1 -1 3 3 3 3 3 3 3 3 3 3 3 3 3 -1
-1 1 1 1 1 1 1 1 1 -1 4 4 4 4 4 4 4 4 -1 -1 1 -1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -1
-1 1 1 1 1 1 1 1 -1 4 4 4 4 4 4 4 4 4 4 4 -1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 -1
-1 1 1 1 1 1 1 1 -1 4 4 4 4 4 4 4 4 4 4 4 4 -1 3 3 3 3 3 3 3 3 3 3 3 3 1 1 -1
-1 1 1 1 1 1 1 1 4 4 4 4 4 4 4 4 4 4 4 4 4 -1 3 3 3 3 3 3 3 3 3 3 1 1 1 1 -1
-1 1 1 1 1 1 1 1 -1 4 4 4 4 4 4 4 4 4 4 4 -1 -1 3 3 3 3 3 3 3 -1 -1 1 1 1 1 1 -1
-1 1 1 1 1 1 1 1 -1 4 4 4 4 4 4 4 4 -1 -1 -1 1 1 -1 3 3 3 3 3 -1 1 1 1 1 1 1 1 -1
-1 1 1 1 1 1 1 1 -1 4 4 4 4 4 4 4 -1 1 1 1 1 1 1 -1 3 3 3 -1 1 1 1 1 1 1 1 1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
上面是正常的。
但看下面的几幅图:rectbw: 为了方便观看,打印出来如下:
0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0
0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0
这是中心区域peak:为了方便观看,打印出来如下:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
这是unknown: 然后我在上面watershed之前打印imglabels没问题:
1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 0 0 0 2 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 0 2 2 2 2 2 2 2 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 0 2 2 2 2 2 2 2 2 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 0 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 0 0 2 2 2 2 2 2 2 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 0 2 2 2 2 2 2 2 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 3 3 3 3 3 3 3 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 0 3 3 3 3 3 3 3 3 3 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 0 3 3 3 3 3 3 3 3 3 3 3 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 0 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 3 3 3 3 3 3 3 3 3 3 3 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1
0 3 3 3 3 3 3 3 3 3 3 3 3 3 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 3 3 3 3 3 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 0 3 3 3 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 3 3 3 3 3 3 3 3 3 3 3 3 3 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 3 3 3 3 3 3 3 3 3 3 3 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 3 3 3 3 3 3 3 3 3 3 3 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1
1 1 3 3 3 3 3 3 3 3 3 3 3 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 3 3 3 3 3 3 3 3 3 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 0 3 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 0 0 0 0 3 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1
按opencv分水岭介绍,这些为0的地方应该会在cv::watershed()后被生长为不同连通域标记,比如要么是2要么是3,可是我打印出来却是:
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 1 1 1 1 1 1 1 -1 2 2 2 2 2 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 1 1 1 1 1 -1 2 2 2 2 2 2 2 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 1 1 1 1 -1 2 2 2 2 2 2 2 2 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 1 1 1 1 -1 2 2 2 2 2 2 2 2 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 1 1 1 -1 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 1 1 1 -1 2 2 2 2 2 2 2 2 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 1 1 1 1 -1 2 2 2 2 2 2 2 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 1 1 1 1 1 -1 -1 -1 -1 2 2 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 1 1 3 3 3 3 3 3 3 -1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 -1 3 3 3 3 3 3 3 3 3 3 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 -1 3 3 3 3 3 3 3 3 3 3 3 3 -1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 3 3 3 3 3 3 3 3 3 3 3 3 3 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 3 3 3 3 3 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 3 3 3 3 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 3 3 3 3 3 3 3 3 3 3 3 3 3 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 3 3 3 3 3 3 3 3 3 3 3 3 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 3 3 3 3 3 3 3 3 3 3 3 3 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 3 3 3 3 3 3 3 3 3 3 3 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 1 3 3 3 3 3 3 3 3 3 3 3 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 1 -1 3 3 3 3 3 3 3 3 3 3 3 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 1 1 -1 3 3 3 3 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 1 1 1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
为什么?我第一次遇到这种情况。之前我用opencv4.5.2的cv::watershed从没遇到过这种情况??!!!为什么右边的目标不是被生长为2或3,而是变成了背景值?这样就导致丢失了一部分内容 !真的很难发现,因为从没怀疑过用过多次的这个函数。通过调试这个函数然后结合上面写出的函数原理发现,opencv的这个函数的确对rectbw这幅图会有bug,如下是第一次调试,即原理图中的第三步,中心区域外围一圈设置为-2,目标图与背景相邻的一圈也设置为-2:
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 100 100 100 100 100 100 100 -2 101 -2 -2 -2 0 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 100 -2 101 101 101 101 101 101 -2 0 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 100 101 101 101 101 101 101 101 101 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -2 101 101 101 101 101 101 101 101 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -2 101 101 101 101 101 101 101 101 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -2 101 101 101 101 101 101 101 101 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -2 101 101 101 101 101 101 101 101 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -2 101 101 101 101 101 101 101 101 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -2 101 101 101 101 101 101 101 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -2 101 101 101 101 101 101 101 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 100 -2 -2 -2 -2 -2 -2 -2 0 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 -2 -2 -2 -2 102 102 102 -2 0 0 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 -2 -2 102 102 102 102 102 102 102 -2 0 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 -2 102 102 102 102 102 102 102 102 102 102 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 -2 0 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 -2 0 0 0 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 -2 0 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 -2 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 -2 102 102 102 102 102 102 102 102 102 102 -2 0 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 -2 102 102 102 102 102 102 102 102 102 102 -2 0 -2 100 100 100 100 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -1
-1 100 102 102 102 102 102 102 102 102 102 -2 0 -2 100 100 100 -2 -2 0 0 0 0 0 0 0 0 0 0 0 -1
-1 100 100 102 102 102 102 102 102 102 -2 0 0 0 -2 100 100 -2 0 0 0 0 0 0 0 0 0 0 0 0 -1
-1 100 100 -2 -2 -2 102 -2 -2 -2 0 0 0 0 0 -2 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 -1
-1 100 100 -2 -2 0 -2 0 0 -2 -2 -2 -2 -2 -2 100 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 -1
-1 100 100 100 100 -2 -2 -2 -2 100 100 100 100 100 100 100 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 -1
-1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -2 0 0 0 0 0 0 0 0 0 0 0 0 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
这与原理一致,没问题,接下来就是慢慢生长,我没有每次调试的结果都打印,为说明问题只打印了关键几次,大家可以看到bug是如何产生的:
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 100 100 100 100 100 100 100 -1 101 101 101 101 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 100 -1 101 101 101 101 101 101 101 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 100 101 101 101 101 101 101 101 101 101 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -1 101 101 101 101 101 101 101 101 101 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -1 101 101 101 101 101 101 101 101 101 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -1 101 101 101 101 101 101 101 101 101 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -1 101 101 101 101 101 101 101 101 101 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -1 101 101 101 101 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -1 101 101 101 101 101 101 101 101 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -1 101 101 101 101 101 101 101 101 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 100 -1 -1 -1 -1 101 101 101 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 -1 -1 -2 102 102 102 -1 -2 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 -1 -2 102 102 102 102 102 102 102 102 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 -1 102 102 102 102 102 102 102 102 102 102 102 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 -2 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 -2 0 0 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 102 -2 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 102 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 -2 102 102 102 102 102 102 102 102 102 102 102 -2 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 -1 102 102 102 102 102 102 102 102 102 102 102 -2 -2 100 100 100 100 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -1
-1 100 102 102 102 102 102 102 102 102 102 102 -2 -2 100 100 100 -2 -2 0 0 0 0 0 0 0 0 0 0 0 -1
-1 100 100 102 102 102 102 102 102 102 -2 -2 0 0 -2 100 100 -2 0 0 0 0 0 0 0 0 0 0 0 0 -1
-1 100 100 -2 -2 -2 102 -2 -2 -2 0 0 0 0 0 -2 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 -1
-1 100 100 -2 -2 0 -2 0 0 -2 -2 -2 -2 -2 -2 100 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 -1
-1 100 100 100 100 -2 -2 -2 -2 100 100 100 100 100 100 100 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 -1
-1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -2 0 0 0 0 0 0 0 0 0 0 0 0 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
目前还正常,继续调试:
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 100 100 100 100 100 100 100 -1 101 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 100 -1 101 101 101 101 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 100 101 101 101 101 101 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -1 101 101 101 101 101 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -1 101 101 101 101 101 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -1 101 101 101 101 101 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -1 101 101 101 101 101 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -1 101 101 101 101 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -1 101 101 101 101 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -1 101 101 101 101 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 100 -1 -1 -1 -1 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 -1 -1 102 102 102 102 -1 -1 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 -1 -1 102 102 102 102 102 102 102 102 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 -1 102 102 102 102 102 102 102 102 102 102 102 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 102 -1 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 102 102 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 102 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 102 -2 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 -1 102 102 102 102 102 102 102 102 102 102 102 102 -2 100 100 100 100 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -1
-1 100 102 102 102 102 102 102 102 102 102 102 102 -2 100 100 100 -2 -2 0 0 0 0 0 0 0 0 0 0 0 -1
-1 100 100 102 102 102 102 102 102 102 102 102 102 102 -2 100 100 -2 0 0 0 0 0 0 0 0 0 0 0 0 -1
-1 100 100 -1 102 102 102 102 102 102 102 102 102 102 102 -2 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 -1
-1 100 100 -2 -2 102 102 102 102 -2 -2 -2 -2 -2 -2 100 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 -1
-1 100 100 100 100 -2 -2 -2 -2 100 100 100 100 100 100 100 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 -1
-1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -2 0 0 0 0 0 0 0 0 0 0 0 0 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
目前也正常,继续调试,按原理图知道-2处的像素应该会被赋予为正确的label:
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 100 100 100 100 100 100 100 -1 101 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 100 -1 101 101 101 101 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 100 101 101 101 101 101 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -1 101 101 101 101 101 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -1 101 101 101 101 101 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -1 101 101 101 101 101 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -1 101 101 101 101 101 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -1 101 101 101 101 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -1 101 101 101 101 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 -1 101 101 101 101 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 100 100 -1 -1 -1 -1 101 101 101 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 100 100 -1 -1 102 102 102 102 -1 -1 101 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 100 -1 -1 102 102 102 102 102 102 102 102 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 -1 102 102 102 102 102 102 102 102 102 102 102 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 102 -1 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 102 102 102 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 102 102 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 102 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 102 102 102 102 102 102 102 102 102 102 102 102 102 -1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -1
-1 -1 102 102 102 102 102 102 102 102 102 102 102 102 -1 100 100 100 100 100 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -1
-1 100 102 102 102 102 102 102 102 102 102 102 102 -2 100 100 100 -2 -2 100 100 100 -2 0 0 0 0 0 0 0 -1
-1 100 100 102 102 102 102 102 102 102 102 102 102 102 -2 100 100 -2 100 100 100 -2 0 0 0 0 0 0 0 0 -1
-1 100 100 -1 102 102 102 102 102 102 102 102 102 102 102 -2 -2 0 -2 100 -2 0 0 0 0 0 0 0 0 0 -1
-1 100 100 -2 -2 102 102 102 102 -2 -2 -2 -2 -2 -2 100 -2 0 0 -2 0 0 0 0 0 0 0 0 0 0 -1
-1 100 100 100 100 -2 -2 -2 -2 100 100 100 100 100 100 100 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 -1
-1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 -2 0 0 0 0 0 0 0 0 0 0 0 0 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
但是这里可以看到,右下角这个目标0处的像素点竟然被填充为了100即背景值,所以是从这里开始错了。
后面再想想应该怎么改正opencv函数的这个缺点。