OPENCV C++(四)形态学操作+连通域统计

形态学操作

先得到一个卷积核

cpp 复制代码
Mat kernel = getStructuringElement(MORPH_RECT,Size(5,5));

第一个是形状 第二个是卷积核大小

依次为腐蚀 膨胀 开运算 闭运算

cpp 复制代码
Mat erodemat,dilatemat,openmat,closemat;
	morphologyEx(result1, erodemat, MORPH_ERODE, kernel);
	morphologyEx(result1, dilatemat, MORPH_DILATE, kernel);
	morphologyEx(result1, openmat, MORPH_OPEN, kernel);
	morphologyEx(result1, closemat, MORPH_CLOSE, kernel);

tips:这些都是针对于二值化图像操作的

单独的也有 例如腐蚀函数

cpp 复制代码
erode(thresh_Mat1, erode_Mat1, element, Point(-1, -1), 2);

这个-1 -1是默认的 不变

2是做两次腐蚀的意思

连通域标记

先定义返回的值

cpp 复制代码
Mat stats;
Mat centroids;
Mat labels;

stats:记录了每个连通区域的信息,是一个5列的矩阵,每一行对应一个连通区域,分别为连通区域外接矩形的x、y、width、height和面积,例如stats[0][4]就是第一个连通区域的面积

centroids:连通域的中心点,没什么大用

labels:输出的labels是一个和原图一样大小的矩阵,原图中检测到的连通图的位置,对应的labels矩阵值为1,其余值为0,算是一种特殊的标记

连通域函数

cpp 复制代码
int nComp = connectedComponentsWithStats(dilatemat, labels, stats, centroids, 8, CV_32S);

处理的图像(膨胀后的图一般是)

输出矩阵(上面有描述)

连通域信息

中心点

8代表8连通,4代表4连通

CV_32S默认参数

ncomp返回的是有几个连通域,但也包括了背景。

标记连通域方法

cpp 复制代码
for (int i = 1; i < nComp; i++)
	{
		//定义Rect类
		Rect bandbox;
		


		
		bandbox.x = stats.at<int>(i, 0);
		bandbox.y = stats.at<int>(i, 1);

		bandbox.width = stats.at<int>(i, 2);
		bandbox.height = stats.at<int>(i, 3);
		
		rectangle(image, bandbox, CV_RGB(255,255,255), 1, 8, 0);
	}

这里stats是连通域信息,为什么不能用stats[i][x]这样呢 因为stats是Mat类型,而不是数组类型,所以要按照规定来以后都这样写

焊点的统计

需要用腐蚀操作将线腐蚀掉

回形针的统计

需要利用开运算 膨胀一点图像

需要利用长宽比统计数目 因为图片中有瑕疵,左边有白色痕迹

cpp 复制代码
for (int i = 1; i < nComp5; i++)
	{
		int width = stats5.at<int>(i, 2);
		int height = stats5.at<int>(i, 3);
		int ratio = height / width;
		if (ratio > 10)
		{
			nComp5--;
		}
	}

一般很多都需要这样判断统计的,这是利用长宽比 还有面积等等等

相关推荐
Y敲键盘的地方几秒前
第1章:从命令行到智能体
人工智能
雷工笔记7 分钟前
读书笔记|《AI知识库:个人与企业的智慧玩法》
人工智能
李可以量化16 分钟前
【2026 量化工具选型】通达信 TdxQuant vs 迅投 QMT/miniQMT 深度对比:新手该怎么选?
大数据·人工智能·区块链·通达信·qmt·量化 qmt ptrade
互联科技报25 分钟前
零售数字化:高准确率客流分析系统优质推荐
大数据·人工智能
互联科技报26 分钟前
成熟零售客流系统该怎么选?决定门店效率的关键选择
人工智能·零售
北京耐用通信32 分钟前
国产优选:耐达讯自动化EtherCAT转RS232在工业协议转换中的卓越表现
人工智能·科技·物联网·网络协议·自动化
沃垠AI37 分钟前
万字干货!Agent Skills从入门到精通
人工智能
mit6.82439 分钟前
设计系统的智慧
人工智能
竹之却1 小时前
【Agent-阿程】AI先锋杯·14天征文挑战第14期-第8天-大模型量化压缩与轻量化部署实战
人工智能
Rik1 小时前
AI Agent 控制浏览器完全指南:OpenClaw × Chrome 的 5 种连接方式
人工智能