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

08 OpenCV 腐蚀和膨胀

文章目录

  • 作用
  • 算子
  • 代码

作用

膨胀与腐蚀是数学形态学在图像处理中最基础的操作。其卷积操作非常简单,对于图像的每个像素,取其一定的邻域,计算最大值/最小值作为新图像对应像素位置的像素值。其中,取最大值就是膨胀,取最小值就是腐蚀。膨胀与腐蚀能实现多种多样的功能,主要如下:

  • 消除噪声
  • 分割出独立的图像元素,在图像中连接相邻的元素。
  • 寻找图像中的明显的极大值区域或极小值区域
  • 求出图像的梯度
    图像梯度计算的是图像变化的速度

算子

膨胀算子

膨胀操作是取每个位置领域内最大值,所以膨胀后输出图像的总体亮度的平均值比起原图会有所升高,图像中比较亮的区域的面积会变大,而较暗物体的尺寸会减小甚至消失。(增加高亮部分)

void dilate( InputArray src, OutputArray dst, InputArray kernel,Point anchor = Point(-1,-1), int iterations = 1,int borderType = BORDER_CONSTANT,const Scalar& borderValue = morphologyDefaultBorderValue() );
/*******************************************************************
*			src: 					输入图像
*			dst:					输出图像
*			kernel:					膨胀操作的核
*					参数为0:中心3*3的核
*			anchor:					锚点
*					(-1,-1):表示位于中心
*			iterations:				 迭代的次数
*			borderType:				 图像外部像素的某种边界模式
*			borderValue:			 边界值,一般不管
*********************************************************************/

腐蚀算子

膨胀和腐蚀是一对好基友,是相反的一对操作,所以腐蚀就是求局部最小值的操作。(减少高亮部分)

void erode( InputArray src, OutputArray dst, InputArray kernel,Point anchor = Point(-1,-1), int iterations = 1,int borderType = BORDER_CONSTANT,const Scalar& borderValue = morphologyDefaultBorderValue() );
/*******************************************************************
*			src: 					输入图像
*			dst:					输出图像
*			kernel:					 腐蚀操作的核
*					参数为0:中心3*3的核
*			anchor:					锚点
*					(-1,-1):表示位于中心
*			iterations:				 迭代的次数
*			borderType:				 断图像外部像素的某种边界模式
*			borderValue:			 边界值,一般不管
*********************************************************************/

获取结构元素

getStructuringElement函数可用于构造一个特定大小和形状的结构元素,用于图像形态学处理

Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));
/*******************************************************************
*			shape: 					形状类型
*			ksize:					大小
*			anchor:					锚点
*					(-1,-1):表示位于中心
*********************************************************************/
//shape取值
enum MorphShapes {MORPH_RECT    = 0, //矩形MORPH_CROSS   = 1, //十字交叉MORPH_ELLIPSE = 2  //椭圆                   
};

轨迹条算子

createTrackbar("Min Threshold:", window_name, &lowThreshold, max_lowThreshold, CannyThreshold);
/** "Min Threshold": trackbar的名字* window_name: 显示图片的窗口的名字* &lowThreshold: trackbar改变的参数的地址* max_lowThreshold: trackbar所改变的参数的最大值* CannyThreshold: 回调函数,当用户通过trackbar改变参数值时会调用一次此回调函数* 此回调函数中的参数均为全局变量 故所有地方均可以调用*/

代码

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;Mat src, dst;
char OUTPUT_WIN[] = "output image";
int element_size = 1;
int max_size = 21;
void CallBack_Demo(int, void*);
int main()
{src = imread("test.jpg");//读取图片if (src.empty()){cout << "could not load img...";return -1;}namedWindow("test");//设置窗口名称imshow("test", src);namedWindow(OUTPUT_WIN);createTrackbar("Element Size :", OUTPUT_WIN, &element_size, max_size, CallBack_Demo);CallBack_Demo(0, 0);waitKey(0);return 0;
}void CallBack_Demo(int, void*)
{int s = element_size  + 1;Mat structureElement = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1));dilate(src, dst, structureElement, Point(-1, -1), 1);//erode(src, dst, structureElement);imshow(OUTPUT_WIN, dst);
}

在这里插入图片描述

相关文章:

  • Aws Ec2服务器设置密码登录
  • [DevOps云实践] 彻底删除AWS云资源
  • 【Docker】若依后端项目搭建
  • MariaDB数据库(二)
  • StarRocks——中信建投统一查询服务平台构建
  • MCU设计--M3内核详解(2)
  • AWTK 开源串口屏开发(11) - 天气预报
  • 电脑不小心格式化了,怎么恢复?
  • 当Linux 磁盘满了,查看大文件并删除
  • Ps:仿制图章工具
  • 通过SDKMAN安装各种版本JDK
  • Electron 多显示器渲染
  • 【Boost搜索引擎项目】Day1 项目介绍+去标签和数据清洗框架搭建
  • 【01】区块链科普100天-模块化区块链
  • Linux性能即时评估60秒秘籍
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • Angularjs之国际化
  • Brief introduction of how to 'Call, Apply and Bind'
  • JavaScript设计模式之工厂模式
  • OSS Web直传 (文件图片)
  • python大佬养成计划----difflib模块
  • Sass Day-01
  • Vim 折腾记
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 闭包--闭包作用之保存(一)
  • 动态规划入门(以爬楼梯为例)
  • 聊聊redis的数据结构的应用
  • 前端面试总结(at, md)
  • 前端性能优化——回流与重绘
  • 原生JS动态加载JS、CSS文件及代码脚本
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #DBA杂记1
  • (007)XHTML文档之标题——h1~h6
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (八)Spring源码解析:Spring MVC
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • .gitignore文件—git忽略文件
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .Net Core与存储过程(一)
  • .Net Web窗口页属性
  • .NET成年了,然后呢?
  • .Net的C#语言取月份数值对应的MonthName值
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • @Autowired标签与 @Resource标签 的区别
  • @Bean有哪些属性
  • @FeignClient注解,fallback和fallbackFactory
  • @GlobalLock注解作用与原理解析
  • [ SNOI 2013 ] Quare
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)