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中有什么不明白的可以去他们的专栏里面看看,内容非常全面,应该能够有比较好的解答。
在文章的最后再次表达由衷的感谢!!

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

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

相关文章

如何保证 RabbitMQ 的消息可靠性?

项目开发中经常会使用消息队列来完成异步处理、应用解耦、流量控制等功能。虽然消息队列的出现解决了一些场景下的问题,但是同时也引出了一些问题,其中使用消息队列时如何保证消息的可靠性就是一个常见的问题。如果在项目中遇到需要保证消息一定被消费的…

Leetcode---114双周赛

题目列表 2869. 收集元素的最少操作次数 2870. 使数组为空的最少操作次数 2871. 将数组分割成最多数目的子数组 2872. 可以被 K 整除连通块的最大数目 一、收集元素的最小操作次数 直接模拟,倒序遍历即可,代码如下 class Solution { public:int mi…

docker搭建jenkins

1.拉取镜像 docker pull jenkinsci/blueocean 2.启动容器 docker run -d -u root -p 8666:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime --name MyJenkins jenkinsci/blueocean 3.访问ip:port,就能访问了 4.docker logs 容器…

Go 团队发布组织 / 构建 Go module 的官方指南

导读Go 团队发布了一份官方指南,帮助开发者更规范地组织 / 构建 Go module。 刚接触 Go 的开发者常见问题之一是,“就文件和文件夹的组织布局而言,如何组织我的 Go 项目?”。这份指南就是提供建议来帮助回答这个问题。其中包括针对…

基于Softmax回归的多分类任务

Logistic回归可以有效地解决二分类问题,但在分类任务中,还有一类多分类问题,即类别数C大于2 的分类问题。Softmax回归就是Logistic回归在多分类问题上的推广。 使用Softmax回归模型对一个简单的数据集进行多分类实验。 首先给大家看一下需要的…

多路彩灯控制器led流水灯VHDL速度可调仿真图视频、源代码

名称:多路彩灯控制器led流水灯VHDL速度可调 软件:Quartus 语言:VHDL 代码功能: 使用VHDL设计彩灯控制器,共24个led灯,分为5种不同的花样,可以通过按键切换花样的变化速度。 代码下载&#…

VBox启动失败、Genymotion启动失败、Vagrant迁移

VBox启动失败、Genymotion启动失败、Vagrant迁移 2023.10.9 最新版本vbox7.0.10、Genymotion3.5.0 Vbox启动失败 1、查看日志 Error -610 in supR3HardenedMainInitRuntime! (enmWhat4) Failed to locate ‘vcruntime140.dll’ 日志信息查看方法->找到虚拟机所在位置->…

如何开始学习量子机器学习

一、关于量子计算 这是我关于量子机器学习(QML)的第二篇文章,这是第一篇,关于为什么你应该开始学习QML。 开始研究量子机器学习很困难,因为我不知道我需要了解多少量子力学和计算知识。我在101年上大学时上了量子力学2…

抽象轻松的java-mybatis简单入门

第一步:用IDEA新建一个java包 第二步:在IDEA中添加数据库(ps:自己百度) 点击数据库 第二步,新建数据库 选择你使用的数据库 用户与密码根据自己的设置进行配置 为了更方便的查看数据库,可以像图…

【kubernetes】带你了解k8s中PV和PVC的由来

文章目录 1 为什么需要卷(Volume)2 卷的挂载2.1 k8s集群中可以直接使用2.2 需要额外的存储组件2.3 公有云 2 PV(Persistent Volume)3 SC(Storage Class) 和 PVC(Persistent Volume Claim)4 总结 1 为什么需要卷(Volume) Pod是由一个或者多个容器组成的,在启动Pod中…

Linux免密登录

目标: 192.168.233.31 ton-pc-003 192.168.233.32 ton-pc-004 在ton-pc-004(以下简称004)免密登录ton-pc-003(以下简称003) 具体流程和说明: 1、在004(客户机)中生成秘钥对 ssh…

【计算机视觉|人脸建模】学习从4D扫描中获取的面部形状和表情的模型

本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:Learning a model of facial shape and expression from 4D scans 链接:Learning a model of facial shape and expression from 4D scans | ACM Transactions on Graphics Pe…

解决方案:AI赋能工业生产3.0,从工业“制造”到“智造”

视频监控技术是一种既成熟又广泛应用于工业制造领域的先进技术。它可以通过安装各种摄像头和传感器来监测整个生产流程,包括原材料的采购、加工、装配和物流等环节,从而实现对生产过程的实时监控和管理,以及对异常事件的及时预警和响应。 在…

【SV中的多线程fork...join/join_any/join_none】

SV中fork_join/fork_join_any/fork_join_none 1 一目了然1.1 fork...join1.2 fork...join_any1.3 fork...join_none 2 总结 SV中fork_join和fork_join_any和fork_join_none; Note: fork_join在Verilog中也有,只有其他的两个是SV中独有的; 1 一目了然 1.…

FreeRTOS自我救赎3之USB虚拟串口

任何项目的功能都从需求出发,在这里我用的是斥侯蜂的一块STM32F407ZGT6 在开发一个项目的过程中,免不了串口调试,而这块板子板载的mircousb不是直接连的引脚而是一个OTGUSB

SpringCloud Alibaba - Seata 部署 TC 服务,并集成微服务

目录 一、Seata 架构 1.1、Seata 架构重要角色 1.2、部署 TC 服务 1.2.1、前言 1.2.2、下载 seata-server 包,解压 1.2.3、修改配置 1.2.4、在 nacos 中添加配置 1.2.5、创建数据库表 1.2.6、启动 TC 服务 1.3、微服务集成 Seata 1.3.1、引入依赖 1.3.2、…

SpringBoot 实现数据脱敏

SpringBoot 实现数据脱敏 前言Hutool 实现数据脱敏引入依赖脱敏工具类代码实现 使用注解的方式定义枚举自定义序列化类定义注解测试 前言 数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。 数据脱敏常用规则有替换、重排、加密…

C++对象模型(8)-- 数据语义学:this指针

1、this指针的认识 this 是 C 中的一个关键字,也是一个 const 指针 ,它指向当前对象,通过它可以访问当前对象的所有成员。所谓当前对象,是指正在使用的对象。 假如有这么一个类: class Base { public:int b_i;int b…

[NewStarCTF 2023 公开赛道] week1 Crypto

brainfuck 题目描述&#xff1a; [>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<-]>>>>>>>.>----.<-----.>-----.>-----.<<<-.>>..…

论文解析——异构多芯粒神经网络加速器

作者 朱郭益, 马胜&#xff0c;张春元, 王波&#xff08;国防科技大学计算机学院&#xff09; 摘要 随着神经网络技术的快速发展, 出于安全性等方面考虑, 大量边缘计算设备被应用于智能计算领域。首先&#xff0c;设计了可应用于边缘计算的异构多芯粒神经网络加速器其基本结构…