cv::watershed(img,mask)

如标题,又说回分水岭。

分水岭的源码分析可参考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函数的这个缺点。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

元气少女缘结神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值