03 计算机视觉-opencv图像形态学处理

# 先定义一个opencv展示函数
import cv2
import matplotlib.pyplot as plt
import numpy as np

%matplotlib inline

def cv_show(name,img):
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

1 形态学-腐蚀操作

img = cv2.imread("dige.png")
cv_show("img",img)
plt.imshow(img)
<matplotlib.image.AxesImage at 0x1d96cb6f0b8>

在这里插入图片描述

kernel = np.ones((3,3),np.uint8)
erosion = cv2.erode(img,kernel,iterations = 1)

cv_show("erosion",erosion)
plt.imshow(erosion)
<matplotlib.image.AxesImage at 0x1d96cdb6ef0>

在这里插入图片描述

pie = cv2.imread("pie.png")

cv_show("pie",pie)
plt.imshow(pie)
<matplotlib.image.AxesImage at 0x1d96cce5048>

在这里插入图片描述

kernel = np.ones((30,30),np.uint8) 
erosion_1 = cv2.erode(pie,kernel,iterations = 1)
erosion_2 = cv2.erode(pie,kernel,iterations = 2)
erosion_3 = cv2.erode(pie,kernel,iterations = 3)
res = np.hstack((erosion_1,erosion_2,erosion_3))
cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
plt.imshow(res)
<matplotlib.image.AxesImage at 0x1d96cf81d30>

在这里插入图片描述

2 形态学-膨胀操作

img = cv2.imread("dige.png")

cv_show("image",img)
plt.imshow(img)
<matplotlib.image.AxesImage at 0x1d964a398d0>

在这里插入图片描述

# 腐蚀
kernel = np.ones((3,3),np.uint8) 
dige_erosion = cv2.erode(img,kernel,iterations = 1)

cv_show("erosion",dige_erosion)
plt.imshow(dige_erosion)
<matplotlib.image.AxesImage at 0x1d96d12ec88>

在这里插入图片描述

# 膨胀
kernel = np.ones((3,3),np.uint8) 
dige_dilate = cv2.dilate(dige_erosion,kernel,iterations = 1)

cv_show("dilate",dige_dilate)
plt.imshow(dige_dilate)
<matplotlib.image.AxesImage at 0x1d96d37a208>

在这里插入图片描述

pie = cv2.imread("pie.png")

kernel = np.ones((30,30),np.uint8) 
dilate_1 = cv2.dilate(pie,kernel,iterations = 1)
dilate_2 = cv2.dilate(pie,kernel,iterations = 2)
dilate_3 = cv2.dilate(pie,kernel,iterations = 3)
res = np.hstack((dilate_1,dilate_2,dilate_3))

cv_show("res",res)
plt.imshow(res)
<matplotlib.image.AxesImage at 0x1d970afea20>

在这里插入图片描述

3 开运算与闭运算

# 开:先腐蚀,再膨胀
img = cv2.imread("dige.png")

kernel = np.ones((5,5),np.uint8)
opening = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)

cv_show("opening",opening)
plt.imshow(opening)
<matplotlib.image.AxesImage at 0x1d96cbcf518>

在这里插入图片描述

# 闭:先膨胀,再腐蚀
img = cv2.imread("dige.png")

kernel = np.ones((5,5),np.uint8)
closing = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)

cv_show("closing",closing)
plt.imshow(closing)
<matplotlib.image.AxesImage at 0x1d96ca07320>

在这里插入图片描述

4 梯度运算

  • 梯度=膨胀-腐蚀
pie = cv2.imread("pie.png")
kernel = np.ones((7,7),np.uint8)
dilate = cv2.dilate(pie,kernel,iterations=5)
erosion = cv2.erode(pie,kernel,iterations=5)

res = np.hstack((dilate,erosion))

cv_show("res",res)
plt.imshow(res)
<matplotlib.image.AxesImage at 0x1d964b96cc0>

在这里插入图片描述

gradient = cv2.morphologyEx(pie,cv2.MORPH_GRADIENT,kernel)

cv_show("gradient",gradient)
plt.imshow(gradient)
<matplotlib.image.AxesImage at 0x1d96caf6a90>

在这里插入图片描述

5 礼帽与黑帽

  • 礼帽 = 原始输入-开运算结果
  • 黑帽 = 闭运算-原始输入
#礼帽
img = cv2.imread("dige.png")
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)

cv_show("tophat",tophat)
plt.imshow(tophat)
<matplotlib.image.AxesImage at 0x1d96ceb8cc0>

在这里插入图片描述

#黑帽
img = cv2.imread("dige.png")
blackhat  = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT, kernel)

cv_show("blackhat",blackhat)
plt.imshow(blackhat)
<matplotlib.image.AxesImage at 0x1d96cc4d630>

在这里插入图片描述

发布了478 篇原创文章 · 获赞 417 · 访问量 32万+

猜你喜欢

转载自blog.csdn.net/Mind_programmonkey/article/details/99474701
今日推荐