OpenCV学习记录——形态学处理

news2024/10/7 11:26:02

文章目录

  • 前言
  • 一、腐蚀和膨胀
  • 二、高级形态学运算
  • 三、具体应用代码

前言

        形态学是图像处理中最常用的技术之一,它主要用于从图像中提取有意义的形状信息,例如边界和连通区域,以便后续的识别工作能够捕捉到目标对象最重要的形状特征。此外,细化、像素化和修剪毛刺等技术也常用于图像的预处理和后处理,以增强图像质量

        形态学转换主要有腐蚀和膨胀开运算和闭运算顶帽和底帽

一、腐蚀和膨胀

        腐蚀和膨胀是两种最基本、最重要的形态学运算, 它们是很多高级形态学处理的基础,有许多形态学算法是由这两种基本运算复合而成的。

        腐蚀与膨胀操作中都需要用到结构元素,可以将二维结构元素理解为一个二维矩阵,矩阵元素是值为“0”或“1”。

        如上图所示,当设定该元素结构左上角的元素为原点时,只有当这三个元素均为有效元素“1”时,左上角的原点元素才视为有效元素,反之为无意义的元素。具体过程下文做详细图解。

(一)腐蚀

        腐蚀的作用是消除小且无意义的目标物,简单来说,如果一个元素以及它周围(结构元素内)的元素全都是有用元素“1”,则将它保留;如果该元素或者它周围存在无意义的元素“0”,就将它消除,如下图所示设定原点为左上角深色标记元素:

腐蚀函数如下:

cv2.erode(src, kernel, iteration)

其中的三个参数分别为:

(1)“src”, 要进行腐蚀的图像

(2)“kernel”, 表示腐蚀操作的结构元素,它是一个表示宽度和高度的元组。例如,(3, 3)表示一个3*3的结构元素

(3)“iteration”, 表示腐蚀操作的迭代次数,即执行腐蚀的次数

(二)膨胀

        膨胀的作用是扩大图像边缘,填充目标物体边缘或内部的非目标像素点。简单来说,就是只要一个元素以及它周围(结构元素内)存在有用元素“1,则将它保留;如果该元素以及它周围不存在有用元素“1”,则将它消除,如下图所示设定原点为左上角深色标记元素:

膨胀函数如下:

cv2.dilate(src, kernel, iteration)

其中的参数含义与腐蚀函数相同

二、高级形态学处理

(一)开运算和闭运算

(1)开运算

        开运算是先腐蚀后膨胀,其作用是分离物体、消除小区域、消除暗背景下的高亮区域。

(2)闭运算 

        闭运算是先膨胀后腐蚀,其作用是消除孔洞,即填充闭合区域、删除亮背景下的暗区域。

(二)顶帽和底帽

(1)顶帽运算(礼帽)

        顶帽运算也称作礼帽,是原始图像与开运算结果图之差(顶帽运算=原始图像-开运算结果图),可以获取原始图像中灰度较亮的区域。

(2)底帽运算(黑帽)

        底帽运算也称作黑帽,是原始图像与闭运算结果图之差(底帽运算=原始图像-闭运算结果图),可以获取原始图像中灰度较暗的区域。

高级形态学处理函数如下:

cv2.morphologyEx(img, op, kernel)

其中三个参数分别为:

(1)“img”, 为输入的图像

(2)“op”, 是操作类型,下表是其取值范围:

取值含义
cv2.MORPH_OPEN
开运算
cv2.MORPH_CLOSE
闭运算
cv2.MORPH_GRADIENT
形态学梯度
cv2.MORPH_TOPHAT
礼帽运算(顶帽运算)
cv2.MORPH_BLACKHAT
黑帽运算(底帽运算)

(3)“kernel”, 表示形态学操作的结构元素,用于定义操作的形状和大小,它是一个表示宽度和高度的元组。例如,(3, 3)表示一个3*3的结构元素

三、具体应用代码

形态学处理的具体应用代码如下:

import cv2

# 图像读取
img_org = cv2.imread('KAI.jpg')

# 形态学处理
erosion_img = cv2.erode(img_org, (10, 10), 1)  # 腐蚀
dilate_img = cv2.dilate(img_org, (10, 10), 1)  # 膨胀
open_img = cv2.morphologyEx(img_org, cv2.MORPH_OPEN, (10, 10))  # 开运算
close_img = cv2.morphologyEx(img_org, cv2.MORPH_CLOSE, (10, 10))  # 闭运算
top_hat_img = cv2.morphologyEx(img_org, cv2.MORPH_TOPHAT, (10, 10))  # 礼帽运算
black_hat_img = cv2.morphologyEx(img_org, cv2.MORPH_BLACKHAT, (10, 10))  # 黑帽运算

# 图像显示
cv2.imshow('Original', img_org)
cv2.imshow('erode', erosion_img)
cv2.imshow('dilate', dilate_img)
cv2.imshow('open', open_img)
cv2.imshow('close', close_img)
cv2.imshow('top_hat', top_hat_img)
cv2.imshow('black_hat', black_hat_img)

cv2.waitKey(0)
cv2.destroyAllWindows()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么飞凌嵌入式的FET527N-C核心板更值得期待?

在高度数字化的智能时代,嵌入式系统在各个领域都发挥着重要作用,因此在项目的选型与开发中选择与需求更为匹配的核心板主控至关重要。飞凌嵌入式最新发布的FET527N-C核心板是一款值得特别关注的产品,具有许多令人瞩目的优势。下面小编将从四个…

arcgis自定义dem高程实现地形抬高 - 操作矢量,转tin、adf(tif),cesiumlab切高程服务

这次记录分享一下arcgis自定义高程全过程 /(ㄒoㄒ)/~~ 我的场景:前端实现地面抬高效果 自定义高程实现地形抬高 一、数据处理 - arcgis操作矢量1、准备工作(可选)2、绘制外围矢量(可选)3、操作矢量数据 二、创建tin - …

第8章 磁盘管理

第8章 磁盘管理 8.1 标准磁盘管理 8.1.1 两种分区格式 MBR(Master Boot Record,主引导分区),支持 4 个主分区或者 3 个主分区 1 个扩展分区,分区的空间最大支持 2.2 TB。 GPT(GUID Partition Table&…

IS-ISv6配置

正文共:1024 字 12 图,预估阅读时间:1 分钟 上篇文章中(OSPFv6配置),我们介绍了OSPFv3的基本配置方式,文中提到,OSPFv3是基于链路运行的,和IS-IS协议比较像。那既然和IS-…

中二少年工具箱(PC端)简介

同学们可以私信我加入学习群! 正文开始 简介一、功能模块1.node版本管理工具 总结 简介 中二少年开发的中二少年工具箱,相信博主,功能不孬。 辅助自己开发工作,帮助新人快速入门,提供交互式文档辅助学习……如果还不…

⑩电子产品拆解分析-家用无线遥控开关433Mhz

⑩电子产品拆解分析-家用无线遥控开关433Mhz 一、功能介绍二、电路分析以及器件作用1、433发射控制端2、433接收应答端三、Get到的点一、功能介绍 ①免布线随意贴,装上就能使用解决单线开关烦恼;②遥控配对简单,无线通讯距离长,信号可穿墙;二、电路分析以及器件作用 1、43…

Spring Bean 定义常见错误

Spring 的核心是围绕 Bean 进行的。不管是 Spring Boot 还是 Spring Cloud,只要名称中带有 Spring 关键字的技术都脱离不了 Bean,而要使用一个 Bean 少不了要先定义出来,所以定义一个 Bean 就变得格外重要了。 当然,对于这么重要…

Node.js 目录穿越漏洞(CVE-2017-14849)

文章目录 Node.js 目录穿越漏洞(CVE-2017-14849)1. 漏洞原理2. 漏洞复现3. 漏洞验证4. 漏洞分析 Node.js 目录穿越漏洞(CVE-2017-14849) 1. 漏洞原理 原因是 Node.js 8.5.0 对目录进行normalize操作时出现了逻辑错误&#xff0c…

01- k8s基础网络知识 之 underlay与overlay网络

前言: 我们在学习k8s网络之前,必须要了解k8s网络相关的一些基础知识,比如什么是underlay网络、overlay网络等,只有把基础知识掌握之后,后续学习k8s网络的时候,一些知识点就不会再云里雾里了。 1 underlay与…

架构整洁之道-组件构建原则

5 组件构建原则 大型软件系统的架构过程与建筑物修建很类似,都是由一个个小组件组成的。所以,如果说SOLID原则是用于指导我们如何将砖块砌成墙与房间的,那么组件构建原则就是用来指导我们如何将这些房间组合成房子的。 5.1 组件 组件是软件的…

IntelliJ创建一个springboot工程

安装jdk mac教程 windows教程 安装maven mac教程 windows教程 建议: 在本地磁盘新建一个文件夹叫maven,然后把下载的maven安装到这里。在后续的IntelliJ操作中,配置maven的settings.xml和repository地址为这个目录下的地址。 创建sprin…

stack和queue及优先级队列和适配器(包括deque)的介绍

stack stack的介绍 stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组…

【INTEL(ALTERA)】为什么 F-tile Serial Lite IV FPGA IP 设计示例会失败

说明 由于Intel Agilex 7 FPGA I 系列收发器-SoC 开发套件的时钟控制器 GUI 存在问题,当您需要配置芯片 Si5332 的 OUT1 时钟频率时,您可能会发现 F-tile Serial Lite IV 英特尔 FPGA IP设计示例失败。这是因为此 Si5332 GUI 存在问题;无法准确配置 OUT…

【算法】约数之和(数论)

题目 给定 n 个正整数 ai,请你输出这些数的乘积的约数之和,答案对 1097 取模。 输入格式 第一行包含整数 n。 接下来 n 行,每行包含一个整数 ai。 输出格式 输出一个整数,表示所给正整数的乘积的约数之和,答案需…

CentOS 8最小安装和网络配置

文章目录 简介下载地址VMware 17创建虚拟机最小化安装拥有的外部命令yum源有问题网络配置开启SSH Server服务关闭防火墙(目前这个地方还是有问题-加上端口依然不能访问)设置host配置JDK环境完整参考 简介 CentOS 8的IOS如果下载DVD版本至少有10G 这里我们直接选择最小安装&…

当Meta转向AI并宣布为投资者分红时,其收入激增

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

算法day9

算法day9 栈与队列基础232用栈实现队列225用队列实现栈 栈与队列理论基础 言简意赅:栈的原理就是后进先出。队列就是先进先出。 相关操作: 栈:入栈,出栈,判栈空,取栈顶元素。 队列:出队&#…

Linux第41步_移植ST公司uboot的第2步_修改网络驱动_USB OTG设备树_LCD驱动_以及编译和烧写测试

移植ST公司uboot的第1步,创建配置文件、设备树、修改电源管理和sdmmc节点后,还需要进一部修改,如:网络驱动、USB OTG设备树、LCD驱动,以及编译和烧写测试。 一、在虚拟机中,使用VSCode打开my_uboot工作区 …

1E,Jarvis March

四个问题: 一,Jarvis March算法借鉴了什么算法? 二,如何确定初始点 三,如何获取凸包的边? 四,Jarvis March算法的好处在哪里? 首先看第一个问题, 一,Jarvis …

Springboot 自定义参数配置化,密钥,密码,文件保存路径

application.properties 和 application.yml 都是一样的配置方法,只是格式不一样 定义配置文件 server.port8080 image.save.pathE:\ #自定义文件保存路径读取配置文件 Value("${image.save.path}")private String filePath;//E:\优化配置文件 如果我参…