成为一个用心的人,热爱生活,追求巅峰
形态学示例代码
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)
结果
你说你心已死,但是我却希望它绽放