本站消息

  本站每日ip已达10000,出租广告位,位置价格可谈,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2019-08(106)

2019-09(105)

2019-10(7)

2019-11(8)

2019-12(13)

荐opencv 之 图像基本形态学处理

发布于2020-03-29 10:39     阅读(1033)     评论(0)     点赞(28)     收藏(2)


1.腐蚀与膨胀

腐蚀

所谓腐蚀就是腐蚀图像的边缘,让图像往里缩,腐蚀程度, 取决于卷积核的大小

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

#  圆的腐蚀案例   可以看到, 每次腐蚀,都会往里边缩
img_circle = cv2.imread('circle.png')

# 下边的这个kernel 表示腐蚀核的大小,核越小,腐蚀程度越小
kernel = np.ones((30, 30), np.uint8)
erosion_1 = cv2.erode(img_circle, kernel, iterations = 1)  # 后边这个表示腐蚀次数, 次数越多,腐蚀越厉害
erosion_2 = cv2.erode(img_circle, kernel, iterations = 2)
erosion_3 = cv2.erode(img_circle, kernel, iterations = 3)

plt.figure(figsize = (12, 12))

plt.subplot(2, 2, 1), plt.imshow(img_circle), plt.title('original')
plt.subplot(2, 2, 2), plt.imshow(erosion_1), plt.title('erosion_1')
plt.subplot(2, 2, 3), plt.imshow(erosion_2), plt.title('erosion_2')
plt.subplot(2, 2, 4), plt.imshow(erosion_3), plt.title('erosion_3')

在这里插入图片描述
调整卷积核kernel的大小, 腐蚀程度会随之变化, 如下是腐蚀的一个案例, 去掉边缘多出来的毛刺

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

img = cv2.imread("fushi.jpg")

kernel = np.ones((5, 5), np.uint8)  # 腐蚀卷积核的大小
erosion = cv2.erode(img, kernel, iterations = 1)  # 后边的iterations表示腐蚀的次数

plt.figure(figsize=(25, 12))

plt.subplot(2, 3, 1), plt.imshow(img), plt.title('original')
plt.subplot(2, 3, 2), plt.imshow(erosion), plt.title('erosion')

在这里插入图片描述
腐蚀操作有很好的,去掉毛刺的效果

膨胀
# 膨胀类似于腐蚀的逆运算
# 如果我们想把上边的 腐蚀操作的毛刺儿去掉,就可以先腐蚀,再膨胀,就可以

img = cv2.imread('fushi.jpg')

kernel = np.ones((5, 5), np.uint8)
dilate_1 = cv2.dilate(img, kernel, iterations = 1)

plt.figure(figsize=(25, 12))

plt.subplot(2, 3, 1), plt.imshow(img), plt.title('original')
plt.subplot(2, 3, 2), plt.imshow(dilate_1), plt.title('dilate_1')

在这里插入图片描述
所谓膨胀就是往外扩, 类似于侵略

2. 开闭运算

开运算
# 开运算相当于是先腐蚀,再膨胀,可以达到去除毛刺的效果
import cv2
import matplotlib.pyplot as plt
import numpy as np

img = cv2.imread('fushi.jpg')

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

plt.figure(figsize=(12, 12))
plt.subplot(2, 2, 1), plt.imshow(img), plt.title('original')
plt.subplot(2, 2, 2), plt.imshow(opening), plt.title('opening')

在这里插入图片描述

闭运算
# 闭运算则是先膨胀, 再腐蚀

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

img = cv2.imread('fushi.jpg')

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

plt.figure(figsize=(12, 12))
plt.subplot(2, 2, 1), plt.imshow(img), plt.title('original')
plt.subplot(2, 2, 2), plt.imshow(closing), plt.title('colsing')

在这里插入图片描述

3.梯度处理

###  梯度运算 = 膨胀 - 腐蚀
import cv2
import matplotlib.pyplot as plt
import numpy as np

img = cv2.imread('circle.png')

kernel = np.ones((7, 7), np.uint8)

dilate = cv2.dilate(img, kernel, iterations = 2)    # 膨胀
erosion = cv2.erode(img, kernel, iterations = 2)    # 腐蚀
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)    # 梯度运算

plt.figure(figsize=(12, 12))

plt.subplot(2, 2, 1), plt.imshow(dilate), plt.title("dilate")
plt.subplot(2, 2, 2), plt.imshow(erosion), plt.title("erosion")
plt.subplot(2, 2, 3), plt.imshow(gradient), plt.title("gradient")

在这里插入图片描述
可以看到,膨胀减去腐蚀就是边缘部分

4. 礼帽与黒帽

礼帽: 原始输入 - 开运算结果
# 所谓原始图像就是最先的图像,开运算的结果就是去毛刺之后的,所以,
# 原来的减去去毛刺的就是只剩下毛刺的

img = cv2.imread('fushi.jpg')

kernel = np.ones((7, 7), np.uint8)
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)

plt.figure(figsize=(12, 12))

plt.subplot(2, 2, 1), plt.imshow(img), plt.title("original")
plt.subplot(2, 2, 2), plt.imshow(tophat), plt.title("tophat")

在这里插入图片描述

黒帽 : 闭运算 - 原始输入
# 闭运算得到的结果是 图像的边缘部分

img = cv2.imread('fushi.jpg')

kernel = np.ones((7, 7), np.uint8)
tophat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)

plt.figure(figsize=(12, 12))

plt.subplot(2, 2, 1), plt.imshow(img), plt.title("original")
plt.subplot(2, 2, 2), plt.imshow(tophat), plt.title("blackhat")

在这里插入图片描述

原文链接:https://blog.csdn.net/weixin_44415928/article/details/105158085



所属网站分类: 技术文章 > 博客

作者:短发越来越短

链接: https://www.pythonheidong.com/blog/article/290092/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

28 0
收藏该文
已收藏

评论内容:(最多支持255个字符)