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

计算机视觉全系列实战教程 (十三):图像形态学操作

1.基本概述

(1)What

图像的形态学操作的本质:集合间的运算 + 几何学

(2)Why(有什么用途)

消除噪声、边缘提取、区域填充、细化和粗化、分割独立的图像元素、求图像梯度、求极大值区域或极小值区域等。

(3)Which(有哪些常见的形态学操作)

A.膨胀
使得图像中“亮色”范围依据传入的结构元kernel扩张
B.腐蚀
使得图像中“暗色”范围依据传入的结构元kernel扩张
C.开运算
先腐蚀,后膨胀(移除小的“亮色”对象)
D.闭运算
先膨胀,后腐蚀(移除小的“暗色”对象)
E.顶帽运算
顶帽 = 原图 - 开运算的结果(分离得到一些“亮”区域)
F.黑帽运算
黑猫 = 闭运算 - 原图(分离得到一些“暗”区域)
G.击中与击不中

2. 如何进行形态学操作

(1)膨胀和腐蚀

这是形态学中最基本的两种操作,其它形态学操作都是基于这两种基本操作进行的。我这里称之为形态学的“基元操作”

step01:获取结构元
矩形(MORPH_RECT)、十字形(MORPH_CROSS)、椭圆形(MORPH_ELLIPSE)

//得到3阶矩阵,形状为矩形(值全为1)
cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3, 3));
//形状为十字形(十字形区域全为1,其它为0)
kernel = cv::getStructuringElement(cv::MORPH_CROSS, cv::Size(3,3));

step02:膨胀和腐蚀
方式一:erode和dilate

int iTms = 10; //腐蚀和膨胀的次数
cv::Mat imTmp01, imTmp02;
cv::dilate(imGray, imTmp01, kernel, cv::Point(-1, -1), iTms);
cv::erode(imGray, imTmp02, kernel, cv::Point(-1, -1), iTms);

方式二:morphologyEx(还可以进行其它形态学操作:开、闭、顶帽、黑帽等)

int iTms = 10; //腐蚀和膨胀的次数
cv::Mat imTmp03, imTmp04;
cv::morphologyEx(imGray, imTmp03, cv::MORPH_ERODE, kernel, cv::Point(-1, -1), iTms);
cv::morphologyEx(imGray, imTmp04, cv::MORPH_DILATE, kernel, cv::Point(-1, -1), iTms);

(2)开运算和闭运算

MORPH_OPEN、MORPH_CLOSE

int iTms = 10; //腐蚀和膨胀的次数
cv::Mat imTmp05, imTmp06;
cv::morphologyEx(imGray, imTmp05, cv::MORPH_OPEN, kernel, cv::Point(-1, -1), iTms);
cv::morphologyEx(imGray, imTmp06, cv::MORPH_CLOSE, kernel, cv::Point(-1, -1), iTms);

(3)顶帽和黑帽

int iTms = 10; //腐蚀和膨胀的次数
cv::Mat imTmp07, imTmp08;
cv::morphologyEx(imGray, imTmp07, cv::MORPH_TOPHAT, kernel, cv::Point(-1, -1), iTms);
cv::morphologyEx(imGray, imTmp08, cv::MORPH_BLACKHAT, kernel, cv::Point(-1, -1), iTms);
http://www.lryc.cn/news/383080.html

相关文章:

  • python的 pyside2 安装
  • R语言——数据与运算
  • 非强化学习的对齐方法
  • 写一个坏越的个人天地(三)
  • 【学习笔记】CSS
  • 与亚马逊云科技深度合作,再获WAPP、ISV认证
  • idea 如何查看项目启动的端口号
  • 年薪超过30万的网工,需要具备什么技能?
  • 【杂记-浅谈OSPF协议中的邻居关系与邻接关系】
  • 白银价格行情分析兼顾基本面和技术面
  • 搜维尔科技推出绿幕抠屏虚拟制作演示项目
  • 大数据集群搭建基础:Linux下MySQL安装!!!
  • FLASH闪存
  • GPT-5智能新纪元的曙光
  • Qt | QPalette 类(调色版)
  • Linux操作系统进程同步的几种方式及基本原理
  • android 责任链模式
  • 【可控图像生成系列论文(四)】IP-Adapter 具体是如何训练的?1公式篇
  • 堆的实现详解
  • iptables配置NAT实现端口转发
  • 【启明智显产品介绍】Model3C工业级HMI芯片详解专题(一)芯片性能
  • Socket编程【个人简单】
  • java入门 grpc测试案例
  • 【操作系统】信号处理与阻塞函数|时序竞态问题
  • go语言day4 引入第三方依赖 整型和字符串转换 进制间转换 指针类型 浮点数类型 字符串类型
  • IOS Swift 从入门到精通:闭包第二部分,高级闭包
  • 爬虫超详细介绍
  • 双向长短期记忆神经网络BiLSTM
  • python基础篇(4):range语句
  • 基于STM32的简易计算器proteus仿真设计(仿真+程序+设计报告+讲解视频)