OpenCV与Python实现图像膨胀和腐蚀详解
本文介绍利用OpenCV和Python进行图像形态学处理的方法,重点解析膨胀与腐蚀的原理。通过3x3内核示例说明像素极值提取过程,并指出操作针对高亮区域。附带完整Python代码,展示如何使用cv2.getStructuringElement定义结构元素,结合cv.threshold进行二值化后执行腐蚀和膨胀操作,实现图像区域的扩张或收缩效果。
1,概念及原理:
膨胀(Dilation)操作涉及以下步骤: (1)使用任意形状的内核(B),通常为正方形或圆形,对图像A进行卷积运算。 (2)内核B包含一个可定义的锚点,一般位于内核中心。 (3)执行膨胀时,内核B在图像A上滑动,提取被内核覆盖区域内的最大像素值,并用该值替换锚点位置的像素。这种最大化操作使得图像中的亮区向外“扩展”,从而得名膨胀(dilation)。
以3*3的内核为例:


腐蚀(Erosion)是膨胀的对应操作: (1)在形态学操作家族中,腐蚀被视为膨胀的孪生操作,它提取的是内核覆盖下的最小像素值。 (2)执行腐蚀时,将内核B在图像上滑动,提取被内核覆盖区域内的最小像素值,并用该值替换锚点位置的像素。


需要注意的是:腐蚀和膨胀操作针对的是图像中的白色部分(即高亮部分),而非黑色背景。膨胀会使图像中的高亮区域向外扩张,导致效果图的高亮区域比原图更大;腐蚀则使原图中的高亮区域向内收缩,导致效果图的高亮区域比原图更小。
源代码:
import cv2 as cv
import numpy as np
def erode_demo(image):
# print(image.shape)
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
#cv.imshow("binary", binary)
kernel = cv.getStructuringElement(cv.MORPH_RECT, (15, 15))#定义结构元素的形状和大小
dst = cv.erode(binary, kernel)#腐蚀操作
cv.imshow("erode_demo", dst)
def dilate_demo(image):
#print(image.shape)
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
#cv.imshow("binary", binary)
kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))#定义结构元素的形状和大小
dst = cv.dilate(binary, kernel)#膨胀操作
cv.imshow("dilate_demo", dst)
src = cv.imread("F:/images/test01.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
erode_demo(src)
dilate_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
运行结果:



到此这篇关于OpenCV+python实现膨胀和腐蚀的示例的文章就介绍到这了,更多相关OpenCV 膨胀和腐蚀内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













