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和面积,例如stats04就是第一个连通区域的面积

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是连通域信息,为什么不能用statsix这样呢 因为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--;
		}
	}

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

相关推荐
冬奇Lab2 小时前
Workflow 系列(06):安全——跨步骤注入传播与四层防御
人工智能·工作流引擎
冬奇Lab2 小时前
每日一个开源项目(第149篇):RAG-Anything - 把图片、表格、公式当成一等公民的多模态 RAG 框架
人工智能·开源
米小虾2 小时前
AI Agent 安全实战指南:当智能体开始"不听话",开发者该如何应对?
人工智能·安全·agent
IT_陈寒4 小时前
Vite的热更新突然不香了,排查三小时差点砸键盘
前端·人工智能·后端
阿里云大数据AI技术6 小时前
构建高转化海外电商搜索:阿里云OpenSearch行业算法版的全链路智能优化策略实战
人工智能·搜索引擎
Awu12276 小时前
⚡从零开发 Agent CLI(五)实现一个可治理、可扩展的工具系统
前端·人工智能·claude
字节跳动视频云技术团队6 小时前
让 Agent 成为音视频工作台:AI MediaKit CLI + Skill 发布
人工智能·音视频开发
魏祖潇6 小时前
framework 整合实战——DDD/TDD/SDD 三件套在 framework 仓的真实落地
人工智能·后端
Token炼金师7 小时前
去噪扩散:从随机噪声到高保真图像的数学之路
人工智能·aigc