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

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…… 这对急用的我非常不友好,当然&#xff0c…...

【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的一批服务器

我们在多个地区拥有高速服务器&#xff0c;保证网速给力&#xff0c;刷片无压力 嘿嘿 <?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的自动装配原理&#xff1a; Spring Boot的自动装配原理是基于约定大于配置的原则&#xff0c;它通过扫描类路径下的各种文件以及类的注解信息来自动配置应用程序的各种组件和功能。Spring Boot会根据约定的规则自动配置相应的Bean&#xff0c;这些Bean都是单例的&…...

【数据库开发】DQL操作和多表设计

数据库开发 一、数据库操作-DQL 1.概述 用来查询数据库表中的记录&#xff0c;查询操作分为两部分&#xff0c;单表操作和多表操作&#xff0c;针对于查询而言&#xff08;相较于增删改更加的灵活&#xff09;基于目标分析条件转换为SQL语句 2.语法 SELECT 字段列表 FROM表…...

用PyTorch轻松实现二分类:逻辑回归入门

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...