腐蚀和膨胀是对白色部分(高亮部分)而言的,不是黑色部分。 膨胀就是图像中的高亮部分进行膨胀,“邻域扩张”,效果图拥有比原图更大的高亮区域。腐蚀就是原图中高亮部分被腐蚀,“邻域被蚕食”,效果图拥有比原图更小的高亮区域。
1.膨胀
膨胀过程是有一个结构元素或者模板去在原图像素比对,当比对过程中,中心像素位置的值根据其八邻域取或运算,或运算为1就取自己的中心值,否则将周围的最大值去代替中心值,如下图。由于将周围的最大值去代替中心值,所膨胀的就是白色(高亮部分)。
膨胀函数
cv2.dilate(img,kernel,iterations)
其中:
第一个参数:img指需要腐蚀的图
第二个参数:kernel指腐蚀操作的内核,默认是一个简单的3X3矩阵,我们也可以利用getStructuringElement()函数指明它的形状
第三个参数:iterations指的是腐蚀次数,省略是默认为1
膨胀代码实现
import cv2 as cv
def dilate_demo(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
cv.imshow("binary", binary)
kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))
dst = cv.dilate(binary, kernel)
cv.imshow("dilate", dst)
src = cv.imread("shufa.jpg")
cv.imshow("shufa", src)
# erode_demo(src)
dilate_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
下图是经过阈值化进行膨胀,所以阈值化后的白色部分膨胀了。
下图是对原图进行膨胀,白色部分膨胀,黑色字体就小了。针对的是高亮部分。
2.腐蚀
膨胀过程是有一个结构元素或者模板去在原图像素比对,当比对过程中,中心像素位置的值根据其八邻域取交运算,交运算为1就取自己的中心值,否则将周围的最小值去代替中心值,如下图。由于将周围的最小值去代替中心值,所腐蚀的就是白色(高亮部分)。
腐蚀函数
cv2.erode(img,kernel,iterations)
膨胀代码实现
import cv2 as cv
def erode_demo(image):
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
cv.imshow("binary", binary)
kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 3))
dst = cv.erode(binary, kernel)
cv.imshow("erode", dst)
src = cv.imread("shufa.jpg")
cv.imshow("shufa", src)
# erode_demo(src)
dilate_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
下图是经过阈值化进行腐蚀,所以阈值化后的白色部分腐蚀了。
下图是对原图进行腐蚀,白色部分腐蚀了,黑色字体就大了。针对的是高亮部分。
初学Opencv,如有错误地方和改进地方,真诚地邀请您提出来,谢谢!
本文结束…