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

news/2024/7/21 4:11:33 标签: 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.niftyadmin.cn/n/5074515.html

相关文章

解决:yarn 无法加载文件 “C:\Users\XXXXX\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本“ 的问题

1、问题描述: 报错的整体代码为: yarn : 无法加载文件 C:\Users\admin\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本 // 整体的报错代码为 : yarn : 无法加载文件 C:\Users\admin\AppData\Roaming\npm\yarn.ps1&…

LCR 140.训练计划 II

​​题目来源: leetcode题目,网址:LCR 140. 训练计划 II - 力扣(LeetCode) 解题思路: 初始时,res 指针指向头节点,end 指针指向头节点后第 cnt 个节点。将两指针同时往后移动&#…

python pytorch- TextCNN TextRNN FastText Transfermer (中英文)文本情感分类实战(附数据集,代码皆可运行)

python pytorch- TextCNN TextRNN FastText Transfermer 文本情感分类实战(附数据集,代码皆可运行) 注:本次实验,主要注重代码实现这些模型,博主的数据集质量较差,模型评估效果并不是十分理想&…

pycharm远程连接服务器

在Python后端开发、AI模型部署时,我们需要在远程服务器上运行Python代码。然而在开发过程中,代码往往需要在主机上不断地编辑、调试,因此我们就会想要在IDE上将本项目代码远程连接到服务器。这里总结PyCharm(专业版才有&#xff0…

【Python】WebUI自动化—Selenium的下载和安装、基本用法、项目实战(16)

文章目录 一.介绍二.下载安装selenium三.安装浏览器驱动四.QuickStart—自动访问百度五.Selenium基本用法1.定位节点1.1.单个元素定位1.2.多个元素定位 2.控制浏览器2.1.设置浏览器窗口大小、位置2.2.浏览器前进、刷新、后退、关闭 3.WebDriver常用方法4.Selenium事件处理4.1.鼠…

leetcode 73.矩阵置零

题目链接:leetcode 73 1.题目 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 2.示例 1)示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&a…

Unity实现设计模式——备忘录模式

Unity实现设计模式——备忘录模式 它可以在不破坏封装性的前提下捕获一个对象的内部状态,并在对象之外保存这个状态,以便在需要的时候恢复到原先保存的状态。 源发器(Originator):需要保存和恢复状态的对象。它创建一…

Oracle-ASM实例communication error问题处理

问题背景: Oracle数据库日志出现大量的WARNING: ASM communication error: op 0 state 0x0 (15055)错误 问题分析: 首先检查ASM实例的状态,尝试通过sqlplus / as sysasm连接asm实例,出现Connected to an idle instance连接asm实例失败 检查ASM实例的后台…