自学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形状唯一依赖锚点位置,其他情况下,锚点只是影响了形态学运算结果的偏移。
--------------------------------------
其实你不知道
在你给我糖的时候
有人给了我蛋糕
我没要
我没要蛋糕我不后悔
后悔的是
我以为这颗糖会一直甜