OpenCV学习笔记12-形态学转换

来源:互联网 发布:优教通软件下载 编辑:程序博客网 时间:2024/04/26 11:26

形态学操作:根据图像形状进行的简单操作。

  • 一般情况下针对二值化图像操作。
  • 两个基本的形态学操作是腐蚀和膨胀。他们的变体构成了开运算,闭运算,梯度等。

1.腐蚀

原理:卷积核沿着图像滑动,如果与卷积核对应的原图像的所有像素值都是 1,那么中心元素就保持原来的像素值,否则就变为零。

效果:前景物体会变小,整幅图像的白色区域会减少。

用途:去除白噪声;断开两个连在一块的物体等。

cv2.erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) -> dst


import numpy as npimport cv2img = cv2.imread('2.png', 0)kernel = np.ones((5,5), np.uint8)erosion = cv2.erode(img, kernel, iterations=1)   #腐蚀plt.subplot(121), plt.imshow(img), plt.title('Original')plt.xticks([]), plt.yticks([])plt.subplot(122), plt.imshow(erosion), plt.title('erosion')plt.xticks([]), plt.yticks([])plt.show()

这里写图片描述


2.膨胀

原理:与腐蚀相反,与卷积核对应的原图像的像素值中只要有一个是 1,中心元素的像素值就是 1。

效果:增加图像中的白色区域(前景)。

用途:可以用来连接两个分开的物体。

cv2.dilate(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) -> dst


import numpy as npimport cv2img = cv2.imread('2.png', 0)kernel = np.ones((5,5), np.uint8)dilate = cv2.dilate(img, kernel, iterations=1)   #膨胀cv2.imshow('img', img)cv2.imshow('dilate', dilate)cv2.waitKey(0)cv2.destroyAllWindows()

这里写图片描述


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)


这里写图片描述


原创粉丝点击