进行边缘保留滤波通常用到两个方法:
1、高斯双边滤波
具体代码:
#高斯双边滤波 def bilateral_demo(img): dst = cv.bilateralFilter(src=img,d=0,sigmaColor=100,sigmaSpace=15) ''' 高斯双边模糊,相当于磨皮操作 src:原图像 d: 像素的领域直径,可有sigmaColor和sigmaColor计算得到 sigmaColor: 颜色空间的标准方差,一般越大越好 sigmaSpace: 坐标空间的标准方差(像素单位),一般越小越好 ''' cv.imshow('bilateal_dome',dst) kennel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32) # 固定写法 表示锐化操作,可以使图像更立体 dst1 = cv.filter2D(dst, -1, kennel) # -1 就表示和原图一样 cv.imshow('sharpening_dome',dst1)
2、均值偏移滤波
具体代码:
#均值偏移滤波 def mean_shift_demo(img): dst = cv.pyrMeanShiftFiltering(src=img,sp=15,sr=20) ''' 均值偏移滤波处理,想当与把图片转油画的操作 src: 原图像 sp:空间窗的半径(The spatial window radius) sr: 色彩窗的半径(The color window radius) 通过均值迁移来进行边缘保留滤波有时会导致图像过度模糊 ''' cv.imshow('mean_shift_demo',dst)
具体原理还没弄懂,具体理论部分可以看看这几个大神的博客:
https://blog.csdn.net/jia20003/article/details/52744157
https://blog.csdn.net/jia20003/article/details/8214567
https://blog.csdn.net/LG1259156776/article/details/51816875