1、学习目标
最基本的形态学操作是两个:侵蚀和膨胀。它们有广泛的用途,即,消除噪音隔离单个元素并连接图像中的不同元素,查找图像中的强度凸起或孔。
(1)如何使用OpenCV进行形态转换。
(2)学习不同的形态学操作,如侵蚀,膨胀,开放,关闭等。
2、使用的函数方法
cv.erode()
cv.dilate()
cv.morphologyEx()
3、程序
结果
程序函数讲解:
腐蚀和膨胀是针对白色部分(高亮部分)而言的。
膨胀:对图像高亮部分进行“领域扩张”,效果图拥有比原图更大的高亮区域;
腐蚀:原图中的高亮区域被蚕食,效果图拥有比原图更小的高亮区域。
(1)膨胀操作
该操作包括将图像A与一些内核(B)卷积,内核(B)可以具有任何形状或大小,通常是正方形或圆形。
内核B有一个定义的锚点,通常是内核的中心。
当在图像上扫描内核B时,我们计算由B重叠的最大像素值,并用该最大值替换锚点位置中的图像像素。这种最大化操作会导致图像中的明亮区域“增长”(因此称为扩张)。
如果内核下的至少一个像素为“1”,则像素元素为“1”。
cv.dilate(img,kernel,iterations=)
参数:
img :源图像
kernel :卷积内核
iterations:迭代次数
(2)
侵蚀操作
内核在图像中滑动(如在2D卷积中)。只有当内核下的所有像素都是1时,原始图像中的像素(1或0)才会被视为1,否则它将被侵蚀(变为零)。
cv2.erode(img,kernel,iterations)
(3)
开放:侵蚀,然后扩张
它有助于消除噪音。
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
(4)
关闭:膨胀之后是侵蚀
它可用于关闭前景对象内的小孔或对象上的小黑点。
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
(5)
形态学梯度
它是图像的膨胀和侵蚀之间的差异。
结果看起来像对象的轮廓。
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
(6)
黑帽
它是输入图像关闭和输入图像之间的差异。
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
(7)
返回一个给定形状和类型的新数组,数组是由1填充的。。
numpy.ones(shape, dtype=None, order='C')
参数:
shape : int或int的序列
新阵列的形状,例如,或。(2, 3)2
dtype : 数据类型,可选
数组的所需数据类型,例如numpy.int8。默认是 numpy.float64。
order : {'C','F'},可选,默认:C
是否在内存中以行主(C风格)或列主(Fortran风格)顺序存储多维数据。
返回:
出 : ndarray
具有给定形状,dtype和顺序的数组。