在前面学习膨胀和腐蚀,由前面的经验可知,膨胀处理后图像的轮廓会变大,腐蚀处理后图像的轮廓会变小,如果拿膨胀的结果减去腐蚀的结果,那么是否就得到图像的轮廓呢?其实是可以,公式如下:
dst=morph_grad(src,element)=dilate(src,element)−erode(src,element)
在这里相当于调用函数morphologyEx,并且设置参数cv2.MORPH_GRADIENT,这样就可计算梯度出来,例子如下:
#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#
import cv2
import numpy as np
#图片的路径
imgname = "szbin1.png"
#读取图片
image = cv2.imread(imgname, cv2.IMREAD_GRAYSCALE)
#图片的高度和宽度
h,w = image.shape[:2]
print('imagesize={}-{}'.format(w,h))
#显示原图
cv2.imshow("Image",image)
#结构元素
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
print(kernel)
#梯度运算
out = cv2.morphologyEx(image, cv2.MORPH_GRADIENT, kernel)
cv2.imshow("out",out)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果输出如下:
输入图片
输出图片
从结果里可以看到,白色的边框就是图像的轮廓,这也是边缘提取的一个方法。
https://blog.csdn.net/caimouse/article/details/51749579
转载:https://blog.csdn.net/caimouse/article/details/102010708
查看评论