其他分享
首页 > 其他分享> > day18:像素距离与连通域

day18:像素距离与连通域

作者:互联网

在图像形态学运算中,常将不与其他区域连接的独立区域称为集合或者连通域,这个集合中的 元素就是包含在连通域内的每一个像素,可以用该像素在图像中的坐标来 描述,像素之 间的距离可以用来表示两个连通域之间的关系.在了解图像形态学运算之前,首先需要了解图像中两个像素之间的距离描述方式,以及如何从图像中分离出不同的连通域。 欧式距离:

 

街道距离:        d=|x1-x2|+|y1-y2| 棋盘距离:        d=max(|x1-x2|,|y1-y2|),两个像素点X方向,y方向距离的最大值

 

 

 代码:

void visionagin::Mydistancetransform()
{
	Mat data = (Mat_<uchar>(5, 5) << 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);
	Mat dststreet, dstouji, dstchess;
	distanceTransform(data, dststreet, 1, 3, CV_8U);//计算街道距离
	distanceTransform(data, dstouji, 2, 5, CV_8U);//计算欧几里得距离
	distanceTransform(data, dstchess, 3, 3, CV_8U);//计算棋盘距离
	cout << dststreet << endl;
	cout << dstouji << endl;
	cout << dstchess << endl;

	Mat src=imread("C:\\Users\\86176\\Downloads\\visionimage\\rice.jfif");
	if (src.empty())
	{
		cout << "open failed !" << endl;
	}
	imshow("原图", src);
	Mat temp1,temp2, gry;
	cvtColor(src, gry, COLOR_BGR2GRAY);
	threshold(gry, temp1, 50, 255, THRESH_BINARY);//黑底白图
	threshold(gry, temp2, 50, 255,THRESH_BINARY_INV);//白底黑图
	imshow("黑底白图", temp1);
	imshow("白底黑图", temp2);
	Mat res1, res2;
	distanceTransform(temp1, res1, 1, 3,CV_32F);//cv_32F显示更清晰
	distanceTransform(temp2, res2, 1, 5,CV_8U);
	imshow("黑底白图res1", res1);
	imshow("白底黑图res2", res2);

}
结果:

 原图及二值化后的图像:

 距离变换后的结果:

 

标签:连通,距离,像素,y1,图像,x2,day18
来源: https://blog.csdn.net/m0_57747965/article/details/120750912