OpenCV4学习笔记(21)——图像连通域

本次要记录的内容是:连通组件标记算法(connected component labeling algorithm)及其信息统计。
图像的连通组件(或者称为连通域更顺口一点)是针对于二值图像而言的,我们都知道二值图像只有0和255这两种像素值分布,当我们扫描二值图像中的每个像素点,并将像素值相同的而且相互连通的像素点分为相同的连通域, 最终得到图像中所有的像素连通组件。最后得到的结果中,每一个连通域表示着这个区域中的像素点有很大的关联性,可能是属于同一个物体的像素点,也可能是属于同一种颜色的像素点。这样我们就可以通过对二值图像的求取连通域,来获取到图像中某些我们感兴趣的区域,从而来进行进一步的操作。
下面来看怎样对图像进行连通域的划分,给出代码实现:

	Mat connected_image = imread("D:\\opencv_c++\\opencv_tutorial\\data\\images\\contours.png");
	imshow("connected_image", connected_image);
	Mat connected_image_gray;
	cvtColor(connected_image, connected_image_gray, COLOR_BGR2GRAY);
	Mat connected_image_gaus;
	GaussianBlur(connected_image_gray, connected_image_gaus, Size(), 1, 1);
	Mat connected_image_binary;
	threshold(connected_image_gaus, connected_image_binary, 0, 255, THRESH_BINARY | THRESH_OTSU);
	imshow("connected_image_binary", connected_image_binary);
	//对二值图像求连通
	Mat label_indexs;			//用于存放求得的连通区域标记
	int num_labels = connectedComponents(connected_image_binary, label_indexs, 8, CV_32S);
	cout << "连通区域数量:" << num_labels - 1 << endl;			//需要减去背景
	vector<Vec3b> colors;			//用于区分不同连通域的颜色向量
	colors.push_back(Vec3b(0, 0, 0));			//将背景设为黑色
	RNG rng;			//生成一个随机数对象
	for (int i = 1; i < num_labels; i++)			//为前景中每一个连通区域,随机生成一种表示颜色
	{
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值