OpenCV Python - 形态转换

基于图像形状的简单操作被称为形态变换。 两种最常见的转换是侵蚀和膨胀


侵蚀

侵蚀消除了前景对象的边界。 类似于二维卷积,一个核在图像A上滑动。如果核下的所有像素都为1,则原始图像中的像素将被保留。

如果为0,成为侵蚀。 所有靠近边界的像素都被丢弃。 此过程对于去除白噪声很有用。

OpenCV中erode()函数的命令如下 −

cv.erode(src, kernel, dst, anchor, iterations)

参数

OpenCV 中的erode() 函数使用以下参数 −

src 和 dst 参数是相同大小的输入和输出图像数组。 Kernel 是用于腐蚀的结构元素矩阵。 例如,3X3 或 5X5。

anchor 参数默认为-1,表示锚点元素在中心。 iterations(迭代)是指应用侵蚀的次数。


膨胀

它与侵蚀正好相反。 这里,一个像素元素为1,如果kernel下至少有一个像素为1。结果,它增加了图像中的白色区域。

dilate() 函数的指令如下 −

cv.dilate(src, kernel, dst, anchor, iterations)

参数

dilate() 函数具有与 erode() 函数相同的参数。 这两个函数都可以有额外的可选参数,如 BorderType 和 borderValue。

BorderType 是图像边界的枚举类型(CONSTANT、REPLICATE、TRANSPERANT 等)

borderValue 用于固定边框的情况。 默认情况下,它是 0。

示例

下面给出的示例程序显示了正在使用的 erode() 和 dilate() 函数 −

import cv2 as cv
import numpy as np
img = cv.imread('LinuxLogo.jpg',0)
kernel = np.ones((5,5),np.uint8)
erosion = cv.erode(img,kernel,iterations = 1)
dilation = cv.dilate(img,kernel,iterations = 1)
cv.imshow('Original', img)
cv.imshow('Erosion', erosion)
cv.imshow('Dialation', dilation)

输出

原始图片

形态

侵蚀

侵蚀

膨胀

扩张