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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/511613.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

#QT(程序打包)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a;打包到windows&#xff08;exe文件&#xff09; 3.记录&#xff1a; &#xff08;1&#xff09;切换工厂到"release"&#xff0c;release模式基本没有调试信息&#xff0c;比较精简&#xff0c;debug模式有很多调试信…

Databend 开源周报第 134 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 支持多语句事务…

Redis 之六:Redis 的哨兵模式(Sentinel)

Redis 哨兵&#xff08;Sentinel&#xff09;模式是一种高可用性解决方案&#xff0c;用于监控和自动故障转移的集群系统。 在 Redis Sentinel 架构中&#xff0c;哨兵是一组运行在特殊模式下的 Redis 进程&#xff0c;它们可以监控一个或多个主从复制结构中的 Redis 主服务器以…

二叉搜索树题目:将有序数组转换为二叉搜索树

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法证明代码复杂度分析 题目 标题和出处 标题&#xff1a;将有序数组转换为二叉搜索树 出处&#xff1a;108. 将有序数组转换为二叉搜索树 难度 4 级 题目描述 要求 给定整数数组 nums \texttt{nums}…

手写分布式配置中心(二)实现分布式配置中心的简单版本

这一篇文章比较简单&#xff0c;就是一个增删改查的服务端和一个获取配置的客户端&#xff0c;旨在搭建一个简单的配置中心架构&#xff0c;代码在 https://gitee.com/summer-cat001/config-center 服务端 服务端选择用springboot 2.7.14搭建&#xff0c;设计了4个接口/confi…

SLAM ORB-SLAM2(21)基础矩阵的计算和评分

SLAM ORB-SLAM2&#xff08;21&#xff09;基础矩阵的计算和评分 1. 前言2. 基础矩阵2.1. 对级约束2.2. 推导2.3. 计算原理 3. ComputeF214. CheckFundamental 1. 前言 在 《SLAM ORB-SLAM2&#xff08;20&#xff09;查找基础矩阵》 中了解到 查找基础矩阵主要过程&#xff1…

MySQL NDB Cluster 分布式架构搭建 自定义启动、重启和关闭集群Shell脚本

此次NDB Cluster使用三台虚拟机进行搭建&#xff0c;一台作为管理节点&#xff1b;而对于另外两台服务器&#xff0c;每一台都充当着数据节点和SQL节点的角色。注意不是MGR主从复制架构&#xff0c;而是分布式MySQL架构。 创建 /var/lib/mysql-cluster/config.ini Cluster全局…

NSSCTF Round#13 WEB

1.flask?jwt? 在忘记密码下面有提示secretkey,那么就可以jwt伪造 自己注册个账号然后登录 点击拿flag提示你不是admin&#xff0c;并且cookie里面有个session,用工具解密一下 python flask_session_cookie_manager3.py decode -s th3f1askisfunny -c .eJwlzjsOAyEMANG7UK…

阿里云打响“算力平价”第一枪

大数据产业创新服务媒体 ——聚焦数据 改变商业 2月29日&#xff0c;阿里云宣布了史上最大力度的一次降价&#xff0c;平均降价幅度超过20%&#xff0c;最高降幅达55%。通过此次降价&#xff0c;阿里云的核心云计算产品价格都击穿了全网最低价。 这次降价&#xff0c;涉及100多…

期货资管分仓软件系统开发的兼容性和可拓展性

国际期货分仓系统开发的兼容性分析 期货资管分仓软件系统&#xff08;⼜称期货分账户系统、期货分账户软件、期货子账户系统 、期货资管软件&#xff09;的兼容性是指其能够在不同的硬件平台、操作系统、数据库系统以及与其他系统的交互中正常工作的能力。为了确保系统的广泛适…

【CSS】(浮动定位)易忘知识点汇总

浮动特性 加了浮动之后的元素,会具有很多特性,需要我们掌握的. 1、浮动元素会脱离标准流(脱标&#xff1a;浮动的盒子不再保留原先的位置) 2、浮动的元素会一行内显示并且元素顶部对齐 注意&#xff1a; 浮动的元素是互相贴靠在一起的&#xff08;不会有缝隙&#xff09;&…

【JavaEE进阶】部署Web项目到Linux服务器

文章目录 &#x1f343;前言&#x1f340;什么是部署&#x1f332;环境配置&#x1f6a9;数据准备&#x1f6a9;程序配置⽂件修改 &#x1f384;构建项目并打包&#x1f38b;上传Jar包到服务器,并运行&#x1f6a9;上传Jar包&#x1f6a9;运行程序&#x1f6a9;开放端口号 &…