python opencv 腐蚀_自学python-opencv(8)膨胀与腐蚀

dilate()函数可以对输入图像用特定结构元素进行膨胀操作,该结构元素确定膨胀操作过程中的邻域的形状,各点像素值将被替换为对应邻域上的最大值:

跟卷积操作类似,假设有图像A和结构元素B,结构元素B在A上面移动,其中B定义其中心为锚点,计算B覆盖下A的最大像素值用来替换锚点的像素,其中B作为结构体可以是任意形状。我们回忆一下中值平滑操作——取每一个位置的矩形领域内值的中值作为该位置的输出灰度值,图像的膨胀操作与中值平滑操作类似,它是取每一个位置的矩形领域内值的最大值作为该位置的输出灰度值。不同的是,这里的领域不再单纯是矩形结构的,也可以是椭圆形结构的、十字交叉形结构的等,其中红色是参考点,也称为锚点(anchor point),如下所示:

最大值替换中心像素

腐蚀操作与膨胀操作类似,只是它取结构元所指定的领域内值的最小值作为该位置的输出灰度值。因为取每个位置领域内最小值,所以腐蚀后输出图像的总体亮度的平均值比起原图会有所降低,图像中比较亮的区域的面积会变小甚至消失,而较暗物体的尺寸会扩大,即最小值替换中心像素。

动画显示:https://www.bilibili.com/video/BV1sK4y187jA/?spm_id_from=333.788.b_7265636f5f6c697374.4

----------------------------------------------------

import cv2

import numpy

def erode_demo(image):

#图片通道

print(image.shape)

#灰度图片

gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

#阈值

ret,binary=cv2.threshold(gray,0,255,cv2.THRESH_BINARY|cv2.THRESH_OTSU)

cv2.imshow("binary_demo", binary)

# 对于锚点的位置

kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))

#腐蚀

dst=cv2.erode(binary,kernel)

#cv2.imshow("gray_demo", gray)

cv2.imshow("erode_demo",dst)

def dilate_demo(image):

#图片通道

print(image.shape)

#灰度图片

gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

#阈值INV是取反

ret,binary=cv2.threshold(gray,0,255,cv2.THRESH_BINARY|cv2.THRESH_OTSU)

cv2.imshow("binary_demo", binary)

# 对于锚点的位置

kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))

#膨胀

dst=cv2.dilate(binary,kernel)

#cv2.imshow("gray_demo", gray)

cv2.imshow("dilate_demo",dst)

print("-----------hi python-------------")

img=cv2.imread("./images/timg.bmp")

cv2.namedWindow("imput images",cv2.WINDOW_AUTOSIZE)

cv2.imshow("imput images",img)

#dilate_demo(img)

# 卷积核

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))

# 膨胀 后显示的膨胀像素

dst = cv2.dilate(img, kernel)

cv2.imshow("img",dst)

cv2.waitKey()

cv2.destroyWindow('all')

------------------------------

cv2.getStructuringElement

这个函数的第一个参数表示内核的形状,有三种形状可以选择。

矩形:MORPH_RECT;

交叉形:MORPH_CROSS;

椭圆形:MORPH_ELLIPSE;

第二和第三个参数分别是内核的尺寸以及锚点的位置。一般在调用erode以及dilate函数之前,先定义一个Mat类型的变量来获得

getStructuringElement函数的返回值: 对于锚点的位置,有默认值Point(-1,-1),表示锚点位于中心点。element形状唯一依赖锚点位置,其他情况下,锚点只是影响了形态学运算结果的偏移。

--------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值