3.3.OpenCV技能树--二值图像处理--图像形态学操作
文章目录
- 1.图像形态学运算简介
- 2.图像开运算处理
- 2.1.图像开运算处理简介
- 2.2.图像开运算处理代码
- 2.3.图像开运算处理效果
- 3.图像闭运算处理
- 3.1.图像闭运算处理简介
- 3.2.图像闭运算处理代码
- 3.3.图像闭运算处理效果
- 4.图像形态学梯度处理
- 4.1.图像形态学梯度处理简介
- 4.2.图像形态学梯度处理代码
- 4.3.图像形态学梯度处理效果
- 5.图像顶帽处理
- 5.1.图像顶帽处理简介
- 5.2.图像顶帽处理代码
- 5.3.图像顶帽处理效果
- 6.图像黑帽处理
- 6.1.图像黑帽处理简介
- 6.2.图像黑帽处理代码
- 6.3.图像黑帽处理效果
- 7.参考文章与致谢
1.图像形态学运算简介
1.图像形态学运算简介:(1)图像形态学是指以形态为基础对图像进行分析的一种方法或技术。(2)图像形态学操作的核心思想是:从图像中提取用于表达或描绘图像形状的信息。(3)图像形态学操作的目的是:使计算机更够更好的对图像进行识别和理解。因为图像形态学处理后可以简化图像数据,同时保存了它们基本的形状特性,去除了不相干的结构。
常见的图像形态学处理操作:

2.图像开运算处理
2.1.图像开运算处理简介
2.1.图像开运算处理简介:
(1)开运算cv2.MORPH_OPEN:先腐蚀后膨胀--dilate(erode(img))
(2)图像开运算是图像依次经过腐蚀、膨胀处理后的过程。图像被腐蚀后,去除了噪声,但是也压缩了图像;接着对腐蚀过的图像进行膨胀处理,可以去除噪声,并保留原有图像。
2.2.图像开运算处理代码
#%%
#图像开运算
import cv2
import numpy as np
import matplotlib.pyplot as plt
img= cv2.imread(r'D:\HuaweiMoveData\Users\27182\Desktop\opencv\3.Binary image processing\lena.png')
kernel1= np.ones((9, 9), np.uint8)#9x9的卷积核子
opening_img1= cv2.morphologyEx(img, cv2.MORPH_OPEN,kernel1)
kernel2= np.ones((15, 15), np.uint8)#15x15的卷积核子
opening_img2= cv2.morphologyEx(img, cv2.MORPH_OPEN,kernel2)plt.figure(figsize=(10,8))
figure=[img,opening_img1,opening_img2]
titile=[u'Orignal Figure',u'Opening Figure(k=9)',u'Opening Figure(k=15)']
for i in range(3):plt.subplot(1,3,i+1)plt.imshow(figure[i])plt.title(titile[i])plt.xticks([]),plt.yticks([])
2.3.图像开运算处理效果

3.图像闭运算处理
3.1.图像闭运算处理简介
3.1.图像闭运算处理简介:(1)闭运算cv2.MORPH_CLOSE:先膨胀后腐蚀--erode(dilate(img))(2)图像闭运算是图像依次经过膨胀、腐蚀处理后的过程。图像先膨胀,后腐蚀,它有助于关闭前景物体内部的小孔,或物体上的小黑点。如下图所示:
3.2.图像闭运算处理代码
#%%
#图像闭运算
import cv2
import numpy as np
import matplotlib.pyplot as plt
img= cv2.imread(r'D:\HuaweiMoveData\Users\27182\Desktop\opencv\3.Binary image processing\lena.png')
kernel1= np.ones((9, 9), np.uint8)#9x9的卷积核子
kernel2= np.ones((15, 15), np.uint8)#15x15的卷积核子#闭运算两种核子
closing1_img = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel1)
closing2_img= cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel2)#绘图
plt.figure(figsize=(10,8))
figure=[img,closing1_img,closing2_img]
titile=[u'Orignal Figure',u'Clongsing Figure(k=9)',u'Clongsing Figure(k=15)']
for i in range(3):plt.subplot(1,3,i+1)plt.imshow(figure[i])plt.title(titile[i])plt.xticks([]),plt.yticks([])
3.3.图像闭运算处理效果

4.图像形态学梯度处理
4.1.图像形态学梯度处理简介
4.1.图像形态学梯度处理简介:
(1)形态学梯度cv2.MORPH_GRADIENT:膨胀图-腐蚀图--dilate(img)-erode(img)
(2)图像梯度运算是膨胀图像减去腐蚀图像的结果,得到图像的轮廓,其中二值图像1表示白色点,0表示黑色点。
4.2.图像形态学梯度处理代码
#%%
import cv2
import numpy as np
import matplotlib.pyplot as plt
img= cv2.imread(r'D:\HuaweiMoveData\Users\27182\Desktop\opencv\3.Binary image processing\lena.png')
kernel1= np.ones((9, 9), np.uint8)#9x9的卷积核子
kernel2= np.ones((15, 15), np.uint8)#15x15的卷积核子#闭运算两种核子gradient1_img = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel1)
gradient2_img= cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel2)#绘图
plt.figure(figsize=(10,8))
figure=[img,gradient1_img,gradient2_img]
titile=[u'Orignal Figure',u'Gradient Figure(k=9)',u'Gradient Figure(k=15)']
for i in range(3):plt.subplot(1,3,i+1)plt.imshow(figure[i])plt.title(titile[i])plt.xticks([]),plt.yticks([])
4.3.图像形态学梯度处理效果

5.图像顶帽处理
5.1.图像顶帽处理简介
5.1.图像顶帽处理简介:
(1)顶帽运算是原图-开运算图,所以顶帽运算可以获得图像的噪声信息,或者得到比原始图的边缘更亮的边缘信息。
(2)顶帽运算cv2.MORPH_TOPHAT:也叫礼帽运算,原始图像-开运算结果 -- img-open(img)
5.2.图像顶帽处理代码
#%%
import cv2
import numpy as np
import matplotlib.pyplot as plt
img= cv2.imread(r'D:\HuaweiMoveData\Users\27182\Desktop\opencv\3.Binary image processing\lena.png')
kernel1= np.ones((9, 9), np.uint8)#9x9的卷积核子
kernel2= np.ones((15, 15), np.uint8)#15x15的卷积核子#闭运算两种核子
tophat1_img = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel1)
tophat2_img= cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel2)#绘图
plt.figure(figsize=(10,8))
figure=[img,tophat1_img,tophat2_img]
titile=[u'Orignal Figure',u'Tophat Figure(k=9)',u'Tophat Figure(k=15)']
for i in range(3):plt.subplot(1,3,i+1)plt.imshow(figure[i])plt.title(titile[i])plt.xticks([]),plt.yticks([])
5.3.图像顶帽处理效果

6.图像黑帽处理
6.1.图像黑帽处理简介
6.1.图像黑帽处理简介
(1)黑帽运算cv2.MORPH_BLACKHAT: 闭运算结果-原始图像 -- close(img)-img
(2)黑帽运算是闭运算图像-原始算图,所以黑帽运算可以获得图像内部的噪音,或者得到比原始图的边缘更暗的边缘信息。
6.2.图像黑帽处理代码
#%%
import cv2
import numpy as np
import matplotlib.pyplot as plt
img= cv2.imread(r'D:\HuaweiMoveData\Users\27182\Desktop\opencv\3.Binary image processing\lena.png')
kernel1= np.ones((9, 9), np.uint8)#9x9的卷积核子
kernel2= np.ones((15, 15), np.uint8)#15x15的卷积核子#闭运算两种核子
Blackhat1_img = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel1)
Blackhat2_img= cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel2)#绘图
plt.figure(figsize=(10,8))
figure=[img,Blackhat1_img,Blackhat2_img]
titile=[u'Orignal Figure',u'Blackhat Figure(k=9)',u'Blackhat Figure(k=15)']
for i in range(3):plt.subplot(1,3,i+1)plt.imshow(figure[i])plt.title(titile[i])plt.xticks([]),plt.yticks([])
6.3.图像黑帽处理效果

7.参考文章与致谢
本章内容的完成离不开大佬们的文章/博客的启发和帮助,在这里列出名单,如果对于内容还有不懂的,可以移步对应的文章进行进一步的理解分析。
1.形态学操作的特点:https://blog.csdn.net/yxdd1gbk/article/details/91566586
2.Opencv形态学开闭运算:https://blog.csdn.net/qq_42856191/article/details/123670455
3.形态学处理:https://blog.csdn.net/zaishuiyifangxym/article/details/89791458
4.opencv学习笔记(八):图像形态学操作:https://zhuanlan.zhihu.com/p/511628175
5.OPenCV技能树专栏:https://edu.csdn.net/skill/opencv/opencv-50c11401b1e8431c964f0771cfe7941b?category=658&typeId=20786
如果大家这这篇blog中有什么不明白的可以去他们的专栏里面看看,内容非常全面,应该能够有比较好的解答。
在文章的最后再次表达由衷的感谢!!
相关文章:
3.3.OpenCV技能树--二值图像处理--图像形态学操作
文章目录 1.图像形态学运算简介2.图像开运算处理2.1.图像开运算处理简介2.2.图像开运算处理代码2.3.图像开运算处理效果 3.图像闭运算处理3.1.图像闭运算处理简介3.2.图像闭运算处理代码3.3.图像闭运算处理效果 4.图像形态学梯度处理4.1.图像形态学梯度处理简介4.2.图像形态学梯…...
这15个海运提单的雷区 你知道吗?
海运提单中英文对照 海运提单主要项目填制说明 1、托运人(Shipper):即与承运人签订运输契约,委托运输的货主,即发货人。在信用证支付方式下,一般以受益人为托运人;托收方式以托收的委托人为托运人。另外,根据《UCP500》…...
几道web题目
总结几道国庆写的web题目 [ACTF2020 新生赛]Include1 点进去发现就一个flag.php,源代码和抓包都没拿到好东西 结合题目猜是文件包含,构建payload ?filephp://filter/readconvert.base64-encode/resourceflag.php 得到base64编码过的flag,解码即可 此题…...
API接口大全分享,含短信API、IP查询API。。。
免费API接口大全分享,含短信API、IP查询API等。。。 语音验证码短信:拨打电话告知用户验证码,实现信息验证。短信验证码:可用于登录、注册、找回密码、支付认证等等应用场景。支持三大运营商,3秒可达,99.9…...
记录一次springboot使用定时任务中@Async没有生效的场景
环境说明 jdk21springboot 3.0.11 springcloud 2022.0.0 spring-cloud-alibaba 2022.0.0.0 在开发一个定时触发的任务的时候,由于开发执行任务的函数比较耗费时间,所以采用异步解决问题。 发现并没有按照预期的触发 经询问后,发现当前类的…...
腾讯云/阿里云国际站免费账号:腾讯云国际站如何对象存储cos设置防盗链
简介 为了避免恶意程序使用资源 URL 盗刷公网流量或使用恶意手法盗用资源,腾讯云国际站给用户带来不必要的损失。腾讯云对象存储支持防盗链配置,建议您通过控制台的防盗链设置配置黑/白名单,来进行安全防护。 注意: 如果您访问对…...
python编程:使用 Pillow 将照片转换为1寸报名照片
引言: 在现代科技时代,我们经常需要调整和处理照片以适应特定的需求和用途。本文将介绍如何使用 wxPython 和 Pillow 库,通过一个简单的图形界面程序,将选择的照片转换为指定尺寸的 JPG 格式,并保存在桌面上。 C:\pyt…...
Aria2 for Mac (免HomeBrew)
Aria2 for Mac (免HomeBrew)-CSDN博客 之前搜索Aria2的安装方法,推荐的方法是使用HomeBrew安装。是,这个插件很省事,但启用条件是你安装了HomeBrew且运行起来需要再下十来个G的Xcode…… 这对急用的我非常不友好,当然,…...
【Java】微服务——Gateway网关
目录 1.为什么需要网关2.gateway快速入门1)创建gateway服务,引入依赖2)编写启动类3)编写基础配置和路由规则4)重启测试5)网关路由的流程图 3.3.断言工厂3.4.过滤器工厂3.4.1.路由过滤器的种类3.4.2.请求头过…...
大厂笔试汇总
大厂笔试 华为笔试汇总1.交易系统的降级策略(二分法)2.获取最多食物(树形DP)3.小王的密码本(哈希)4.每日股票价格(单调栈)5.中庸行者(回溯)输入描述输出描述6.数字序列比大小(贪心)输入描述输出描述7、快递中转站8、互通设备集字节跳动中兴笔试华为笔试汇总 1.交易…...
【数据结构】快排的详细讲解
目录: 介绍 一,递归快排确定基准值 二,递归遍历 三,非递归的快排 四,快排的效率 介绍 快排是排序算法中效率是比较高的,快排的基本思想是运用二分思想,与二叉树的前序遍历类似,…...
蓝牙资讯|三星推迟发布智能戒指Galaxy Ring,智能穿戴小型化是大趋势
根据外媒 The Elec 报道,Galaxy Ring这款戒指主要面向健康和 XR 头显市场,该智能戒指可能被延期至 2024 年第三季度后发布。 外媒声称三星 Galaxy Ring 的上市周期,主要取决医疗认证的相关审批时间,三星计划将在 2024 年第三季度…...
移动端tree树
注意: 这是uniapp的写法,vue想用的话需要改造一下,里边的view和text,vue不能用,改成div,span即可。 样式rpx也要改成px tree树组件(QQ群:旧群没了,新群:801142650) - …...
SpringTask ----定时任务框架 ----苍穹外卖day10
目录 SpringTask 需求分析 快速入门 使用步骤 编辑业务开发 SpringTask 定时任务场景特化的框架 需求分析 快速入门 使用cron表达式来使用该框架 使用步骤 添加注解 自定义定时任务类 重点在于以下cron表达式的书写,精确表达触发的间隔 业务开发 主task方法 time使用(-…...
Fuzz测试:发现软件隐患和漏洞的秘密武器
0x01 什么是模糊测试 模糊测试(Fuzz Testing)是一种广泛用于软件安全和质量测试的自动化测试方法。它的基本思想是向输入参数或数据中注入随机、不规则或异常的数据,以检测目标程序或系统在处理不合法、不正常或边缘情况下的行为。模糊测试通…...
无为WiFi的一批服务器
我们在多个地区拥有高速服务器,保证网速给力,刷片无压力 嘿嘿 <?phpinclude("./includes/common.php"); $actisset($_GET[act])?daddslashes($_GET[act]):null; $urldaddslashes($_GET[url]); $authcodedaddslashes($_GET[authcode]);he…...
SpringBoot3.0——踩坑
SpringBoot3.0后有一些改动 JDK要17以上lombok <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version> </dependency>servlet <dependency><groupId>ja…...
Springboot的自动装配原理和文件上传FastDFS
Spring Boot的自动装配原理: Spring Boot的自动装配原理是基于约定大于配置的原则,它通过扫描类路径下的各种文件以及类的注解信息来自动配置应用程序的各种组件和功能。Spring Boot会根据约定的规则自动配置相应的Bean,这些Bean都是单例的&…...
【数据库开发】DQL操作和多表设计
数据库开发 一、数据库操作-DQL 1.概述 用来查询数据库表中的记录,查询操作分为两部分,单表操作和多表操作,针对于查询而言(相较于增删改更加的灵活)基于目标分析条件转换为SQL语句 2.语法 SELECT 字段列表 FROM表…...
用PyTorch轻松实现二分类:逻辑回归入门
💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
