当前位置: 首页 > news >正文

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

形态学操作

 先得到一个卷积核

Mat kernel = getStructuringElement(MORPH_RECT,Size(5,5));

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

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

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:这些都是针对于二值化图像操作的

单独的也有 例如腐蚀函数

erode(thresh_Mat1, erode_Mat1, element, Point(-1, -1), 2);

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

2是做两次腐蚀的意思

连通域标记

先定义返回的值

Mat stats;
Mat centroids;
Mat labels;

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

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

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

连通域函数

int nComp = connectedComponentsWithStats(dilatemat, labels, stats, centroids, 8, CV_32S);

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

输出矩阵(上面有描述)

连通域信息

中心点

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

CV_32S默认参数

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

标记连通域方法

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类型,而不是数组类型,所以要按照规定来以后都这样写

焊点的统计

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

 

回形针的统计

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

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

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--;}}

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

http://www.lryc.cn/news/113521.html

相关文章:

  • tomcat上部署jpress
  • 篇十:外观模式:简化复杂系统
  • linux gcc __attribute__
  • 【SpringCloud】RabbitMQ基础
  • css, resize 拖拉宽度
  • Python识别抖音Tiktok、巨量引擎滑块验证码识别
  • EvilBox One靶场笔记
  • shell脚本中的export无效
  • 前沿分享-鱼形机器人
  • 摄像机终端IP地址白名单配置流程
  • Glibc—查看版本
  • C++物理引擎Box2D的下载,编译,VS2013配置环境
  • STL容器详解——map容器
  • VR全景在建筑工程行业能起到哪些作用?
  • P1257 平面上的最接近点对
  • 8月1日上课内容 第一章web基础与http协议
  • Gson 添加数据默认值问题记录
  • 利用Arthas+APM监控进行Java性能深度定位
  • 【BASH】回顾与知识点梳理(十一)
  • vue2-diff算法
  • SpringBoot使用redis作为缓存的实例
  • vue3使用vue3-seamless-scroll插件
  • QT开发学习相关笔记
  • 拆分PDBQT文件并将其转换为PDB格式
  • Reinforcement Learning with Code 【Code 4. DQN】
  • Python3 高级教程 | Python3 正则表达式(一)
  • 奥威BI系统:零编程建模、开发报表,提升决策速度
  • 海康威视摄像头二次开发_云台控制_视频画面实时预览(基于Qt实现)
  • 单片机外部晶振故障后自动切换内部晶振——以STM32为例
  • Matlab实现决策树算法(附上多个完整仿真源码)