OpenCV(三十一):形态学操作

​​​​​​1.形态学操作

       OpenCV 提供了丰富的函数来进行形态学操作,包括腐蚀、膨胀、开运算、闭运算等。下面介绍一些常用的 OpenCV 形态学操作函数:

  1. 腐蚀操作(Erosion): erode(src, dst, kernel, anchor, iterations, borderType, borderValue) 该函数对输入图像中的前景区域进行腐蚀操作,通过用结构元素中的最小值替换区域中的像素值来收缩前景区域。

  2. 膨胀操作(Dilation): dilate(src, dst, kernel, anchor, iterations, borderType, borderValue) 该函数对输入图像中的前景区域进行膨胀操作,通过用结构元素中的最大值替换区域中的像素值来扩展前景区域。

  3. 开运算(Opening): morphologyEx(src, dst, MORPH_OPEN, kernel, anchor, iterations, borderType, borderValue) 开运算是先对图像进行腐蚀操作,然后再进行膨胀操作。这个操作可以去除小的噪声,并平滑图像的边界。

  4. 闭运算(Closing): morphologyEx(src, dst, MORPH_CLOSE, kernel, anchor, iterations, borderType, borderValue) 闭运算是先对图像进行膨胀操作,然后再进行腐蚀操作。这个操作可以填充小的空洞,并平滑图像的边界。

  5. 梯度运算(Gradient): morphologyEx(src, dst, MORPH_GRADIENT, kernel, anchor, iterations, borderType, borderValue) 梯度运算可以通过对输入图像的膨胀和腐蚀结果之差来突出显示边缘。

  6. 顶帽运算(Top Hat): morphologyEx(src, dst, MORPH_TOPHAT, kernel, anchor, iterations, borderType, borderValue) 顶帽运算可以通过对输入图像和开运算结果之差来突出显示边缘和细节。

  7. 黑帽运算(Black Hat): morphologyEx(src, dst, MORPH_BLACKHAT, kernel, anchor, iterations, borderType, borderValue) 黑帽运算可以通过对闭运算结果和输入图像之差来突出显示边缘和细节。

以上函数中,src 是输入图像,dst 是输出图像,kernel 是结构元素,anchor 是结构元素的锚点位置,iterations 是迭代次数,borderType 是边界像素处理方式,borderValue 是边界像素的值。

2.相关函数morphologyEx()

morphologyEx() 是 OpenCV 库中用于形态学操作的函数之一。它可以执行包括腐蚀、膨胀、开运算、闭运算等一系列形态学操作。该函数的原型如下:

void morphologyEx(

InputArray src,

OutputArray dst,

int op,

InputArray kernel,

Point anchor = Point(-1,-1),

int iterations = 1,

int borderType = BORDER_CONSTANT,

const Scalar& borderValue = morphologyDefaultBorderValue()

);

该函数的参数包括:

  • src:输入图像或图像数组。

  • dst:输出图像或图像数组。

  • op:指定形态学操作的类型。

  • kernel:结构元素(核)用于形态学操作。

  • anchor:结构元素中心的位置,默认为(-1, -1)表示结构元素的中心位置为核的中心。

  • iterations:执行形态学操作的迭代次数,默认为1。

  • borderType:边界像素处理方式,默认为BORDER_CONSTANT。

  • borderValue:当borderType为BORDER_CONSTANT时指定边界像素的值,默认为morphologyDefaultBorderValue()。

其中形态学操作的类型:

3.示例代码:

void image_morphologyEx(Mat image){Mat gray;cvtColor(image,gray,COLOR_BGR2GRAY);//灰度化threshold(gray,gray,80,255,THRESH_BINARY);//5×5矩阵结构元素Mat kernel= getStructuringElement(0,Size(5,5));Mat open,close,gradient,tophat,blackhat;//对图像进行开运算morphologyEx(gray,open,MORPH_OPEN,kernel);//对图像进行闭运算morphologyEx(gray,close,MORPH_CLOSE,kernel);//对图像进行梯度运算morphologyEx(gray,gradient,MORPH_GRADIENT,kernel);//对图像进行顶帽运算morphologyEx(gray,tophat,MORPH_TOPHAT,kernel);//对图像进行黑帽运算morphologyEx(gray,blackhat,MORPH_BLACKHAT,kernel);}

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

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

相关文章

Wireshark技巧[监听串口包]

监听串口包 本文摘录于:https://blog.csdn.net/qq_20405005/article/details/79652927只是做学习备份之用,绝无抄袭之意,有疑惑请联系本人! 这里要保证安装了USBpcap: 打开USBpcap后一半都要输入过滤条件,否则USB太多数据了,比如…

PHP实现微信小程序状态检测(违规、暂停服务、维护中、正在修复)

实现原理 进入那些状态不正常的小程序会被重定向至一个Url&#xff0c;使用抓包软件抓取这个Url&#xff0c;剔除不必要参数&#xff0c;使用cURl函数请求网页获得HTML内容&#xff0c;根据内容解析出当前APPID的小程序的状态。 代码 <?php// 编码header(Content-type:ap…

正弦信号的平均功率和峰值电压计算举例

正弦信号的平均功率和峰值电压计算举例 一、问题 假设加载在纯电阻为R1Ω&#xff0c;频率为50Hz和60Hz的正弦信号的平均功率分别为0.5W和2W,请求解这两个信号的峰值电压 U p 1 U_{p1} Up1​和 U p 2 U_{p2} Up2​。 二、解答&#xff1a; 根据欧姆定律可知&#xff1a;对于…

docker镜像 容器 仓库

docker镜像 Docker 运行容器前需要本地存在对应的镜像&#xff0c;如果本地不存在该镜像&#xff0c;Docker会从镜像仓库下载该镜像。 获取镜像 Docker Hub 上有大量的高质量的镜像可以用&#xff0c;这里我们就说一下怎么获取这些镜像。 从 Docker 镜像仓库获取镜像的命令…

2023-9-8 求组合数(三)

题目链接&#xff1a;求组合数 IV #include <iostream> #include <algorithm>using namespace std;const int N 5010;int primes[N], cnt; bool st[N]; // 每个质数的次数 int sum[N];void get_primes(int n) {for(int i 2; i < n; i){if(!st[i]) primes[cnt]…

为什么vector容器的begin()既可以被iterator 也可以被const_iterator指向?

答&#xff1a;vector容器中的begin&#xff08;&#xff09;是函数接口&#xff0c;它作为函数&#xff0c;被重载了。 typedef T* iterator; typedef const T* const_iterator; iterator begin();//括号中有隐含形参*this&#xff1b; const_iterator begin() const;//形参为…

UDP的可靠性传输2

系列文章目录 第一章 UDP的可靠性传输-理论篇&#xff08;一&#xff09; 第二章 UDP的可靠性传输-理论篇&#xff08;二&#xff09; 文章目录 系列文章目录三、流量控制RTORTT流量控制1.如何控制流量2. 发送方何时在发送数据3.流程图 拥塞控制1.慢启动 总结1.拥塞控制和流量…

React基础

目录 TODO1 React概述 React的使用 React脚手架的使用 全局安装 npx安装 在脚手架中使用React JSX 1. JSX的基本使用 1.1 为什么用JSX 1.2 JSX简介 1.3 使用步骤 1.4 脚手架中能用JSX 1.5 注意点 2. 在JSX中使用JavaScript表达式 2.1 嵌入js表达式 2.2 注意点 3…

三.listview或tableviw显示

一.使用qt creator 转变类型 变形为listview或tableviw 二.导出ui文件为py文件 # from123.py 为导出 py文件 form.ui 为 qt creator创造的 ui 文件 pyuic5 -o x:\xxx\from123.py form.uifrom123.py listview # -*- coding: utf-8 -*-# Form implementation generated fro…

linux编辑器-vim

1.vim是什么 vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富&#xff0c;在程序员中被广泛使用。简单的来说&#xff0c; vi 是老式的字处理器&#xff0c;不过功能已经很齐全了&#xff0c;但是还是有可以进步的地方。 vim 则可以…

虹科分享 | MKA:基于先进车载网络安全解决方案的密钥协议

MKA作为MACsec的密钥协议&#xff0c;具有安全、高效、针对性强的特点&#xff0c;为您的汽车ECU通讯创建了一个安全的通信平台&#xff0c;可以助力您的各种汽车创新项目&#xff01; 虹科方案 | 什么是基于MACsec的汽车MKA 一、MACsec在汽车行业的应用 在以往的文章中&#…

云原生Kubernetes:pod基础

目录 一、理论 1.pod 2.pod容器分类 3.镜像拉取策略&#xff08;image PullPolicy&#xff09; 二、实验 1.Pod容器的分类 2.镜像拉取策略 三、问题 1.apiVersion 报错 2.pod v1版本资源未注册 3.取行显示指定pod信息 四、总结 一、理论 1.pod (1) 概念 Pod是ku…

《智能网联汽车自动驾驶功能测试规程》

一、 编制背景 2018 年4 月12 日&#xff0c;工业和信息化部、公安部、交通运输部联合发布《智能网联汽车道路测试管理规范(试行)》&#xff08;以下简称《管理规范》&#xff09;&#xff0c;对智能网联汽车道路测试申请、审核、管理以及测试主体、测试驾驶人和测试车辆要求等…

Vue.js 中的路由(Route)跳转

Vue.js 中的路由 官方解释 在 Vue.js 中&#xff0c;路由是一种用于导航和页面跳转的重要概念。Vue 提供了一个名为 Vue Router 的官方插件&#xff0c;用于构建单页面应用程序&#xff08;SPA&#xff09;的路由系统。Vue Router 允许您将不同的组件映射到应用程序的不同 URL…

分享5个和安全相关的 VSCode 插件

开发高质量的软件应用程序可能是艰巨的&#xff0c;因为许多组成部分必须协同工作才能创建出一个可运行的解决方案。这就是为什么开发人员需要尽可能获得所有帮助和便利&#xff0c;特别是在保护他们的应用程序时。 Visual Studio Code&#xff08;VSCode&#xff09;是最受欢迎…

eNSP-抓包实验

拓扑结构图&#xff1a; 实验需求&#xff1a; 1. 按照图中的设备名称&#xff0c;配置各设备名称 2. 按照图中的IP地址规划&#xff0c;配置IP地址 3. 使用Wireshark工具进行抓ping包&#xff0c;并分析报文 4. 理解TCP三次握手的建立机制 实验步骤&#xff1a; 1、配置P…

Python之Xlwings操作excel

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、xlwings简介二、安装与使用1.安装2.使用3.xlwings结构说明 二、xlwings对App常见的操作App基础操作工作簿的基础操作工作表的基础操作工作表其他操作 读取单元格…

uview indexList 按字母跳转不了

点击字母跳转不到位的问题&#xff1a;在<u-index-list>添加方法select“clickSelect“ 锚点要加id&#xff0c;用对应的字母做为id值&#xff0c; <u-index-anchor :id"key" :index"key"/> <template><view><view class&qu…

快速排序算法的递归和非递归

基本思路 选择一个基准值&#xff0c;将数组划分三个区域&#xff0c;小于基准值的区域位于左侧&#xff0c;等于基准值的区域位于中间&#xff0c;大于基准值的区域位于右侧。将大于和小于区域继续进行分区&#xff0c;周而复始&#xff0c;不断进行分区和交换&#xff0c;直…

超详细的 pytest 教程(一)使用入门篇

前言 pytest到目前为止还没有翻译的比较好全面的使用文档&#xff0c;很多英文不太好的小伙伴&#xff0c;在学习时看英文文档还是很吃力。本来去年就计划写pytest详细的使用文档的&#xff0c;由于时间关系一直搁置&#xff0c;直到今天才开始写。本文是第一篇&#xff0c;主…