代码语言:javascript复制
import cv2
import numpy as np
o=cv2.imread("C:/Users/xpp/Desktop/Lena.png",cv2.IMREAD_UNCHANGED)#原始图像
kernel=np.ones((5,5,),np.uint8)#设置核kernel
r=cv2.morphologyEx(o,cv2.MORPH_GRADIENT,kernel)#梯度运算
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()
算法:梯度运算是图像的膨胀图像减去腐蚀图像的操作,获取原始图像中前景图像的边缘,寻找图像中的极大区域和极小区域,比如用大一圈的图像减去小一圈的图像得到边缘的信息。
- 首先读取图像
- 进行腐蚀和膨胀操作
- 膨胀图像减去腐蚀图像,得到相减后的图像,获得梯度运算图像的结果
- 绘制前面两步生成的图片
对于膨胀图像A,腐蚀图像B:
A-B={x|Bx⊆A}
result=cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
- img表示输入图像
- cv2.MORPH_GRADIENT表示梯度运算
- kernel表示梯度运算时所采用的结构类型
注意:此方法是基本梯度运算,基本梯度是膨胀图像减去腐蚀图像的差值;内部梯度是原图减去腐蚀图像的差值;外部梯度是膨胀图像减去原图的差值。