Python 计算机视觉—— OpenCV 图像形态学处理

Posted 一马归一码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 计算机视觉—— OpenCV 图像形态学处理相关的知识,希望对你有一定的参考价值。

参考的一些文章以及论文我都会给大家分享出来 —— 链接就贴在原文,论文我上传到资源中去,大家可以免费下载学习,如果当天资源区找不到论文,那就等等,可能正在审核,审核完后就可以下载了。大家一起学习,一起进步!加油!!

目录

前言

(1)基本概念

(2)读取图像信息

1. 图像腐蚀

(1)基本概念

(2)代码实现

2. 图像膨胀

(1)基本概念

(2)代码实现

3. 图像开运算

(1)基本概念

(2)代码实现

4. 图像闭运算

(1)基本概念

(2)代码实现

5. 图像梯度运算

(1)基本概念

(2)代码实现

6. 图像顶帽运算

(1)基本概念

(2)代码实现

7. 图像底帽运算

(1)基本概念

(2)代码实现

结束语


前言

(1)基本概念

此处参考:图像处理中常见的形态学方法

       形态学图像处理(简称形态学)是指一系列处理图像形状特征的图像处理技术,其基本思想是利用一些特殊的结构元来测量或提取图像中相应的形状和特征,以便进一步进行图像分析和处理。

(2)读取图像信息

"""
Author:XiaoMa
date:2021/11/2
"""
import cv2
import numpy as np

img0 = cv2.imread("E:\\From Zhihu\\For the desk\\cveleven.jpg")
img1 = cv2.resize(img0, dsize = None, fx = 0.5, fy = 0.5)
img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
h, w = img1.shape[:2]
print(h, w)
cv2.namedWindow("W0")
cv2.imshow("W0", img1)
cv2.waitKey(delay = 0)
cv2.namedWindow("W1")
cv2.imshow("W1", img2)
cv2.waitKey(delay = 0)

经典操作,不必多说了,得到的图像信息如下:

 

 350 560

       除了读取图像信息,我们还需要将图像改为二值图像,因为图像形态学一般是对二值图像进行处理分析的。此处可以参考:图像阈值处理 

#图像二值化
ret, img3 = cv2.threshold(img2, 135, 255, cv2.THRESH_BINARY)
cv2.namedWindow("W2")
cv2.imshow("W2", img3)

  

1. 图像腐蚀

(1)基本概念

       前面我们将图像转化为二值图像,则显示的图像只有黑白两种区别,图像腐蚀操作就是扩大图像中的黑色部分,使得图像中的白色减少,即白色部分被腐蚀。

(2)代码实现

此处参考:OpenCV 官网

k = np.ones((5, 5), np.uint8) #创建内核
#腐蚀
img4 = cv2.erode(img3, k, iterations = 1)
cv2.namedWindow("W3")
cv2.imshow("W3", img4)
cv2.waitKey(delay = 0)

 

2. 图像膨胀

(1)基本概念

       膨胀是和腐蚀相对的一种概念,所以腐蚀减少了二值图像中的白色部分,那么膨胀肯定就是扩大了图像中的白色部分。

(2)代码实现

#膨胀
img5 = cv2.dilate(img3, k, iterations = 1)
cv2.namedWindow("W4")
cv2.imshow("W4", img5)
cv2.waitKey(delay = 0)

  

3. 图像开运算

(1)基本概念

         开,按照字面意思就是打开嘛,所以对于图像的先腐蚀,后膨胀操作就是图像的开运算了。

(2)代码实现

#开运算
img6 = cv2.morphologyEx(img3, cv2.MORPH_OPEN, k)
cv2.namedWindow("W5")
cv2.imshow("W5", img6)
cv2.waitKey(delay = 0)

  

4. 图像闭运算

(1)基本概念

         对图像的先膨胀,后腐蚀操作

(2)代码实现

#闭运算
img7 = cv2.morphologyEx(img3, cv2.MORPH_CLOSE, k)
cv2.namedWindow("W6")
cv2.imshow("W6", img7)
cv2.waitKey(delay = 0)

  

5. 图像梯度运算

(1)基本概念

         通过图像梯度运算,显示了图像腐蚀和膨胀之间的部分,类似于勾勒出了一个轮廓。

(2)代码实现

#梯度运算
img8 = cv2.morphologyEx(img3, cv2.MORPH_GRADIENT, k)
cv2.namedWindow("W7")
cv2.imshow("W7", img8)
cv2.waitKey(delay = 0)

 

6. 图像顶帽运算

(1)基本概念

         通过图像顶帽运算,显示的是原图像与开运算得到的图像之间的区别

(2)代码实现

#顶帽运算
img9 = cv2.morphologyEx(img3, cv2.MORPH_TOPHAT, k)
cv2.namedWindow("W8")
cv2.imshow("W8", img9)
cv2.waitKey(delay = 0)

 

7. 图像底帽运算

(1)基本概念

         通过图像底帽运算,显示的是原图像与闭运算得到的图像之间的区别

(2)代码实现

#底帽运算
img10 = cv2.morphologyEx(img3, cv2.MORPH_BLACKHAT, k)
cv2.namedWindow("W9")
cv2.imshow("W9", img10)
cv2.waitKey(delay = 0)

 

结束语

       这篇文章主要介绍了图像形态学处理中的一些基本操作方法,包括图像的腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算以及底帽运算这几部分,参考的文章链接都粘贴在了原文中,需要加强学习、深入了解的小伙伴可以点进去查看。图像形态学处理的主要目的是得到图像的形状信息,一般在一些研究动植物行为状态等领域使用的较广,大家感兴趣可以多了解,多学习,加油!

以上是关于Python 计算机视觉—— OpenCV 图像形态学处理的主要内容,如果未能解决你的问题,请参考以下文章

快速学完OpenCV+python计算机视觉图像处理

计算机视觉OpenCV 4高级编程与项目实战(Python版):图像处理基础

计算机视觉OpenCV 4高级编程与项目实战(Python版):图像处理基础

计算机视觉OpenCV 4高级编程与项目实战(Python版):图像处理基础

Python 计算机视觉—— OpenCV进行图像算数与逻辑运算

python下使用OpenCV实现计算机视觉读书笔记2图像与字节的变换