第三章、图像形态学处理

基于Python的OpenCV学习

第三章、图像形态学处理

00_思维导图

第三章、图像形态学处理_第1张图片

01_cv2.erode

import cv2
import numpy as np
import matplotlib.pyplot as plt

img1 = cv2.imread('dige.png')
# 借助numpy快速生成3*3的元素项为1的矩阵。
kernel1 = np.ones((3,3))

# cv2.erode(image,kernel1,iterations)方法,实现对图像的腐蚀操作。
img2 = cv2.erode(img1,kernel1,iterations=1)
img3 = cv2.erode(img1,kernel1,iterations=2)
img4 = cv2.erode(img1,kernel1,iterations=3)
# kernel - 核、内核,表示腐蚀矩阵,iterations表示腐蚀次数。
# 详细介绍一下腐蚀操作的原理:有这样一个矩阵,kernel,比如(3, 3)。
# 矩阵在图像中不断的平移,在这个矩阵中,哪一种颜色所占的比重大,矩阵中的像素点都换成这种颜色。

img_list = [img1,img2,img3,img4]
img_tittle = ['init','1','2','3']
# 调用matplotlib观察变化。
for i in range(4):
    plt.subplot(1,4,i+1)
    plt.imshow(img_list[i])
    plt.title(img_tittle[i])
plt.show()
cv2.waitKey()
cv2.destroyAllWindows()

运行结果:

第三章、图像形态学处理_第2张图片

02_cv2.dilate

import cv2
import numpy as np
import matplotlib.pyplot as plt

img1 = cv2.imread('dige.png')
kernel1 = np.ones((3,3))
img2 = cv2.erode(img1,kernel1,iterations=2)

# 在使用腐蚀操作对图像进行预处理后,原图像笔画不可避免地缩小变细。
# 此时需要用膨胀操作抵消腐蚀操作,从而还原出原图。
# 值得注意的是,膨胀与腐蚀并不是100%的逆运算。

# cv2.dilate(img2,kernel,iterationd)方法,实现图像的膨胀操作。
img3 = cv2.dilate(img2,kernel1,iterations=2)
img4 = cv2.dilate(img2,kernel1,iterations=4)
# 膨胀操作与腐蚀操作变量含义一致,此处不做赘述。

img_list = [img1,img2,img3,img4]
img_tittle = ['init','erode','dilate*2','dilate*4']
# 调用matplotlib观察图像变化。
for i in range(4):
    plt.subplot(1,4,i+1)
    plt.imshow(img_list[i])
    plt.title(img_tittle[i])
plt.show()
cv2.waitKey()
cv2.destroyAllWindows()

运行结果:

第三章、图像形态学处理_第3张图片

03_cv2.morphologyEx

import cv2
import numpy as np
import matplotlib.pyplot as plt

img1 = cv2.imread('dige.png')
kernel1 = np.ones((3,3))

# cv2.morphologyEx(image,type,kernel)方法,实现图像的形态学操作。
# morphology - 形态学
# 当type=cv2.MORPH_OPEN时,执行开运算,先腐蚀后膨胀。
img2 = cv2.morphologyEx(img1,cv2.MORPH_OPEN,kernel1)
# 当type=cv2.MORPH_CLOSE时,执行闭运算,先膨胀后腐蚀。
img3 = cv2.morphologyEx(img1,cv2.MORPH_CLOSE,kernel1)
# 当type=cv2.MORPH_GRADIENT,执行梯度运算,膨胀减去腐蚀,得到一个边界集。
img4 = cv2.morphologyEx(img1,cv2.MORPH_GRADIENT,kernel1)
# 当type=cv2.MORPH_TOPHAT,执行礼帽运算,原图减去开运算结果。
img5 = cv2.morphologyEx(img1,cv2.MORPH_TOPHAT,kernel1)
# 当type=cv2.MORPH_GRADIENT,执行黑帽运算,闭运算结果减去原图。
img6 = cv2.morphologyEx(img1,cv2.MORPH_BLACKHAT,kernel1)

img_list = [img1,img2,img3,img4,img5,img6]
img_tittle = ['init','open','close','gradient','tophat','blackhat']
# 调用matplotlib观察图像变化。
for i in range(6):
    plt.subplot(2,3,i+1)
    plt.imshow(img_list[i])
    plt.title(img_tittle[i])
plt.show()
cv2.waitKey()
cv2.destroyAllWindows()

运行结果:

第三章、图像形态学处理_第4张图片

你可能感兴趣的:(opencv,python,计算机视觉)