梯度运算

2022-05-28 16:14:29 浏览数 (1)

代码语言: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表示梯度运算时所采用的结构类型

注意:此方法是基本梯度运算,基本梯度是膨胀图像减去腐蚀图像的差值;内部梯度是原图减去腐蚀图像的差值;外部梯度是膨胀图像减去原图的差值。

0 人点赞