图像膨胀

2022-05-28 16:13:47 浏览数 (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
dilation=cv2.dilate(o,kernel,iterations=9)#膨胀图像
cv2.imshow("original",o)
cv2.imshow("dilation",dilation)
cv2.waitKey()
cv2.destroyAllWindows()

算法:图像膨胀是对图像的边界进行扩张。如果图像内两个对象的距离较近,在膨胀过程中,两个对象可能会连在一起。膨胀和腐蚀作用相反,膨胀可以填补分割图像后的空白位置。

  • 首先设置核kernel
  • 然后核kernel遍历图像,当kernel的中心分别位于img[1, 1]、img[1, 2]、img[1, 3]、img[2, 1]、img[2, 2]、img[2, 3]、img[3, 1]、img[3, 2]、img[3, 3]时,核内像素点与前景图像像素点重合
  • 最后得到膨胀图像

dst=cv2.dilate(src, kernel[, anchor[, interations[, borderType[, borderValue]]]])

  • dst表示膨胀后的图像,该图像和原始图像具有同样的类型和大小
  • src表示输入图像,图像的通道数可以任意。图像的深度是CV_8U、CV_16U、CV_16S、CV_32F、CV_64F
  • kernel表示膨胀操作时所采用的结构类型,通过函数cv2.getStructuringElement()生成
  • anchor表示element结构中的锚点位置,默认值为(-1,-1),在核中心位置
  • interations表示腐蚀操作迭代 的次数,默认值为1
  • borderType表示边界样式,默认值BORDER_CONSTANT
  • borderValue表示边界值

注意:如果结构元中任意一点处于前景图像中,就将膨胀结果图像中对应像素点处理为前景色。如果结构元完全处于背景图像外,就将膨胀结果图像中对应像素点处理为背景色。

0 人点赞