小言_互联网的博客

在OpenCV里实现形态学梯度

516人阅读  评论(0)

在前面学习膨胀和腐蚀,由前面的经验可知,膨胀处理后图像的轮廓会变大,腐蚀处理后图像的轮廓会变小,如果拿膨胀的结果减去腐蚀的结果,那么是否就得到图像的轮廓呢?其实是可以,公式如下:

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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场