3

opencv图像处理基础之膨胀和腐蚀

 1 year ago
source link: https://blog.51cto.com/gugu/6113487
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

膨胀和腐蚀是图像处理中最常用也是最基础的形态学操作。它可以改变图像的一些属性。其中比较常见的应用场景有:

1、边缘检测:膨胀和腐蚀可以提取二值图像中的边缘信息。通过先膨胀再腐蚀的操作,可以使边缘更加的明显。所以可以为边缘检测提供很好的辅助作用

2、噪声去除:在二值图像中可能存在一些噪声点,或者孤立的像素点,我们通过一定次数的腐蚀操作就可以将孤立的像素点消除掉,也可以通过一定次数的膨胀操作来填充小的噪声点。

3、图像分割:可以通过膨胀和腐蚀的操作,提取文本区域等等

4、形态学重建:形态学重建也是一种基于膨胀和腐蚀处理图像的方法,可以用于重建二值图像中的形状,比如在医学图像处理中就可以使用到形态学重建来分割肺部区域

5、形态学梯度:形态学梯度就是指的膨胀和腐蚀之间的差异,用于检测图像中的物体边缘,比如在工业质检中可以用来检测产品的缺陷和边缘

膨胀的原理:

膨胀操作是将图像中的物体边缘膨胀或者扩张。他将原始图像中的每个像素替换为它的相邻像素中的最大值。膨胀可以使物体变得更加的粗壮或者消除小的孤立区域。

腐蚀的原理:

腐蚀操作是将图像中的物体边缘腐蚀或者缩小。他将原始图像中的每个像素替换为它的相邻像素中的最小值。腐蚀可以使物体变得更加细小或者消除小的噪声点。

函数介绍:

在opencv中,可以用cv2.erode()函数和cv2.dilate()函数来实现腐蚀和膨胀操作。这两个函数都有相似的参数列表:

cv2.erode(src,kernel[,dst[,anchor[,iterations[,borderType[,borderValue]]]]])
cv2.dilate(src,kernel[,dst[,anchor[,iterations[,borderType[,borderValue]]]]])

其中,src使输入图像,kernel是核元素,用于计算膨胀或腐蚀的结构元素,dst是输出图像,anchor是结构元素的锚点位置,iterations是迭代次数,boderType是用于填充边缘的像素边界类型,borderValue是用于填充边缘的像素值

我们举个例子:

import cv2 as cv
import numpy as np


def test():
# 读取图像
img = cv.imread("input.jpg", cv.IMREAD_GRAYSCALE)
# 定义结构元素
kernel = np.ones((5, 5), np.uint8)

# 腐蚀操作
erosion = cv.erode(img, kernel, iterations=1)

# 膨胀操作
dilation = cv.dilate(img, kernel, iterations=1)

# 膨胀再腐蚀
re_erosion = cv.erode(dilation, kernel, iterations=1)

cv.imshow("original", img)
cv.imshow("erosion", erosion)
cv.imshow("dilation", dilation)
cv.imshow("re_erosion", re_erosion)
cv.waitKey(0)
cv.destroyAllWindows()


# Press the green button in the gutter to run the script.
if __name__ == '__main__':
test()
opencv图像处理基础之膨胀和腐蚀_opencv

膨胀后的效果(物体变粗):

opencv图像处理基础之膨胀和腐蚀_像素点_02

腐蚀后的效果(物体变细)

opencv图像处理基础之膨胀和腐蚀_opencv_03

先膨胀再腐蚀后的效果(保留了更多的细节,并减少了噪点)

opencv图像处理基础之膨胀和腐蚀_边缘检测_04

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK