一篇文章秒懂形态学变化的所有形式及其Python实现

成为一个用心的人,热爱生活,追求巅峰

形态学示例代码

import cv2
import numpy as np


img = cv2.imread('../data/mask.jpg')

k = np.ones((5, 5), np.uint8)

xingtaixue = cv2.morphologyEx(img, cv2.MORPH_ERODE, kernel=k, iterations=3)
# 第一个参数img表示要进行变化的输入图像
# 第三个参数表示的是形态学处理的结构元,也成称为核,一般自己定义大小和形状
# 第四个参数表示形态学进行处理的次数,
# 重点重点重点,第二个参数的不同选项可以实现不同的形态学处理方式,文章接下来会一一说明


cv2.imshow('img', img)
cv2.imshow('xingtaixue', xingtaixue)
cv2.waitKey()
cv2.destroyAllWindows()
cv2.imwrite('../data/xingtaixue.jpg', xingtaixue)

重点重点重点,修改代码中的第二个参数就可以实现以下形态学的操作了
第一,腐蚀(cv2.MORPH_ERODE)原图和效果图
在这里插入图片描述
第二,膨胀(cv2.MORPH_DILATE),原图和效果图
在这里插入图片描述
第三,开运算(cv2.MORPH_OPEN), 开运算可以用于去噪、计数等操作
在这里插入图片描述
第四,闭运算(cv2.MORPH_COLSE), 可以去除前景物体上面的小黑点,还可以将不同的前景图像进行连接
在这里插入图片描述
第五,形态学梯度运算(cv2.MORPH_GRADIENT),可以获取原始图像中的前景图像的边缘
在这里插入图片描述
第六,礼帽运算(cv2.MORPH_TOPHAT),可以得到“噪声”
在这里插入图片描述
第七,黑帽运算(cv2.MORPH_BLACKHAT),能够获得图像内部的小孔,或者前景的小黑点

在这里插入图片描述
补充一个知识点
结构元opencv也有一个函数叫cv2.getStructuringElement()来建立
这里也给一个示例

import cv2
import numpy as np


img = cv2.imread('../data/mask.jpg')

k = np.ones((5, 5), np.uint8)
ret = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
# 第一个参数有三种选项,不同的选项对应不同的结构元形状
# cv2.MORPH_RECT表示全1矩形
# cv2.MORPH_CROSS表示十字架
# cv2.MORPH_ELLIPSE表示椭圆
# 请各位读者自行验证一次便明了
print(ret)

结果
在这里插入图片描述

你说你心已死,但是我却希望它绽放

发布了45 篇原创文章 · 获赞 24 · 访问量 3421

猜你喜欢

转载自blog.csdn.net/my_name_is_learn/article/details/104004860