3.3.OpenCV技能树--二值图像处理--图像形态学操作

news2024/11/16 19:46:46

文章目录

  • 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.coloradmin.cn/o/1074150.html

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

相关文章

网康 NS-ASG安全网关存在远程命令执行漏洞 复现

文章目录 网康 NS-ASG安全网关存在远程命令执行漏洞 复现0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 网康 NS-ASG安全网关存在远程命令执行漏洞 复现 0x01 前言 免责声明:请勿利用文章内的相关技…

基于SpringBooy的安康旅游网站的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 登录模块的实现 景点信息管理界面 酒店信息管理界面 特产管理界面 游客管理界面 景点购票订单管理界面 系统主界面 游客注册界面 景点信息详情界面 酒店详情界面 特产详情界面 三、核心代码 1、登录模块 2、文件上传模块…

Nginx + PHP 异常排查,open_basedir 异常处理

新上一个网站,通过域名访问失败,排查方法如下: 开启异常日志 开启域名下,nginx的异常日志,并查看日志 tail -f /var/log/nginx/nginx.localhost.error.log开启php的异常日志,该配置位于php.ini文件下 …

Java 21:虚拟线程介绍

Java 21 版本更新中最重要的功能之一就是虚拟线程 (JEP 444)。这些轻量级线程减少了编写、维护和观察高吞吐量并发应用程序所需的工作量。 正如我的许多其他文章一样,在推出新功能之前,让我们先看看 Java 21 版本更新前的现状,以便更好地了解…

Denoising Score Matching (DSM) 去噪得分匹配模型变分推理(VAE)退火郎之万动力学

Denoising Score Matching——DSM 有没有谁通俗的讲一下Denoising score matching? Denoising Score Matching (DSM) 论文 << A Connection Between Score Matching and Denoising Autoencoders>> 作者是将denoising autoencoder和score mathching 联系在了一起…

图像处理与计算机视觉--第七章-神经网络-单层感知器

文章目录 1.单层感知器原理介绍2.单层感知器算法流程3.单层感知器算法实现4.单层感知器效果展示5.参考文章与致谢 1.单层感知器原理介绍 1.单层感知器是感知器中最简单的一种&#xff0c;有单个神经元组成的单层感知器只能用于解决线性可分的二分性问题2.在空间中如果输入的数据…

《spring security in action》读书笔记

1. why spring security 是强大的高度可定制的 身份验证 和 访问控制 应用级框架。 常见的漏洞包含&#xff1a; 身份验证失效&#xff0c;会话固定&#xff0c;跨站脚本xss请求伪造&#xff0c;CSRF注入敏感数据泄漏缺乏方法访问控制。 身份验证失效&#xff1a; 不能仅仅验…

基于正点原子alpha开发板的第三篇系统移植

系统移植的三大步骤如下&#xff1a; 系统uboot移植系统linux移植系统rootfs制作 一言难尽&#xff0c;踩了不少坑&#xff0c;当时只是想学习驱动开发&#xff0c;发现必须要将第三篇系统移植弄好才可以学习后面驱动&#xff0c;现将移植好的文件分享出来&#xff1a; 仓库&…

一篇讲清楚Java for循环详解

for 语句是应用最广泛、功能最强的一种循环语句。大部分情况下&#xff0c;for 循环可以代替 while 循环、do while 循环。 for 语句是一种在程序执行前就要先判断条件表达式是否为真的循环语句。假如条件表达式的结果为假&#xff0c;那么它的循环语句根本不会执行。for 语句通…

七个有用的 GIT 命令

在这篇文章中&#xff0c;我将与你分享7个 GIT 命令。 它们是有用的简短命令&#xff0c;但有时我们会错过它们。 01、查看之前的分支 我们将从一个非常短的 git 命令开始这个列表。 有时&#xff0c;我们在分支机构工作。 对于某些季节&#xff0c;我们需要切换到另一个分支…

图片批量处理:将长图切割成短图,轻松高效!

在日常生活中&#xff0c;我们经常需要处理大量的图片&#xff0c;包括上传和下载的图片。有时候&#xff0c;我们可能需要将这些长图切割成几个短图&#xff0c;以便更好地管理和使用。但是&#xff0c;如何快速高效地完成这个任务呢&#xff1f;今天&#xff0c;我们将向你介…

ViewPager、RecycleView实现轮播图

1.ViewPager实现轮播图形效果。 1&#xff09;layout中&#xff0c;PageIndicatorView轮播的View <RelativeLayoutandroid:layout_width"match_parent"android:layout_height"200dp"android:orientation"vertical"><androidx.viewpager…

nio 文件传输

transferto方法一次只能传输2个g的数据 文件大于2个g时

双十一孩子护眼台灯应该怎么选?2023好用护眼台灯推荐

在快节奏的生活中&#xff0c;孩子的压力越来越大&#xff0c;越来越需要良好的光线进行学习&#xff0c;越来越多的家长考虑到孩子的视力问题&#xff0c;选择购买护眼台灯来为孩子提供良好舒适的光线环境&#xff0c;选择一款舒适的护眼台灯尤为重要&#xff0c;那么&#xf…

fastadmin 后台列表数据多表查询筛选

记录一下fastadmin后台列表数据连表查询筛选提示&#xff1a; 1&#xff1a;下拉框方式搜索 示例&#xff1a; 在对应js文件中添加如下代码&#xff1a; 代码&#xff1a; {field: s.area_id,title: __(所属片区),visible: false,//不显示在列表中operate: ,searchList: $.…

3.2.OpenCV技能树--二值图像处理--图像腐蚀与膨胀

文章目录 1.文章内容来源2.图像膨胀处理2.1.图像膨胀原理简介2.2.图像膨胀核心代码2.3.图像膨胀效果展示 3.图像腐蚀处理3.1.图像腐蚀原理简介3.2.图像腐蚀核心代码3.3.图像腐蚀效果展示 4.易错点总结与反思 1.文章内容来源 1.题目来源:https://edu.csdn.net/skill/practice/o…

芥墨 | 设计需要平衡那些我们都会跳跃的创意

在这个空间很显然&#xff0c;洞石是作为设计师的首选&#xff0c;在电视墙、壁炉、都用了温润柔和的洞石铺设而成。设计这个门洞也是请了设计师最喜爱的工匠合作&#xff0c;他们知道如何配合设计师&#xff0c;精准的执行&#xff0c;对细节有着极致的标准。

如何解决openal32.dll丢失,有什么办法解决

你第一次知道openal32.dll文件是在什么情况下&#xff0c;你了解过openal32.dll文件吗&#xff1f;如果电脑中openal32.dll丢失有什么办法可以解决&#xff0c;今天就教大家如何解决openal32.dll丢失&#xff0c;都有哪些办法可以解决openal32.dll丢失。 一&#xff0e;openal3…

解决: 使用html2canvas和print-js打印组件时, 超出高度出现空白页

如果所示&#xff1a;当我利用html2canvas转换成图片后, 然后使用print-js打印多张图片, 第一张会出现空白页 打印组件可参考这个: Vue-使用html2canvas和print-js打印组件 解决: 因为是使用html2canvas转换成图片后才打印的, 而图片是行内块级元素, 会有间隙, 所以被挤下去了…

基于YOLOv5的火灾烟雾检测系统

目录 1&#xff0c;YOLOv5算法原理介绍 2&#xff0c;代码实现 3&#xff0c;结果展示 1&#xff0c;YOLOv5算法原理介绍 YOLOv5是目前应用广泛的目标检测算法之一&#xff0c;其主要结构分为两个部分&#xff1a;骨干网络和检测头。 骨干网络采用的是CSPDarknet53&#xff…