高斯模糊只考虑了权重,只考虑了像素空间的分布,没有考虑像素值和另一个像素值之间差异的问题,如果像素间差异较大的情况下(比如图像的边缘),高斯模糊会进行处理,但是我们不需要处理边缘,要进行的操作就叫做边缘保留滤波(EPF)
EPF的操作具体有两种做法:
1、高斯双边模糊(类似磨皮效果)
def bi_demo(image):
'''
高斯双边模糊:
#image:输入图像,图像必须是8位或浮点型单通道、三通道的图像
#0-distance:表示在过滤过程中每个像素邻域的直径范围,一般为0
#100-sigmaColor:尽量取大,目的将小的差异模糊掉,噪声去掉
#15- sigmaSpace:尽量取小,那么“和”就小一点,主要的差异就保留下来
'''
dst=cv.bilateralFilter(image,0,100,15)
cv.imshow('bi_demo',dst)
2、均值迁移模糊,(更像似油画效果)
def shift_function(image):
'''
均值迁移模糊:
sp:(The spatial window radius) 定义的漂移物理空间半径大小
sr:(The color window radius) 定义的漂移色彩空间半径大小;
'''
dst = cv.pyrMeanShiftFiltering(image, 10, 50)
cv.imshow("shift_function", dst)
完整代码
import cv2 as cv
import numpy as np
#高斯双边模糊EPF
def bi_demo(image):
dst=cv.bilateralFilter(image,0,100,15)
cv.imshow("di_demo",dst)
def shift_demo(image):
dst=cv.pyrMeanShiftFiltering(image,0,10,50)
cv.imshow("shift_demo",dst)
#读取图像,支持 bmp、jpg、png、tiff 等常用格式
src = cv.imread("F:/Projects/images/2.jpg")
#创建窗口并显示图像
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src) #显示原图
bi_demo(src)
shift_demo(src)
cv.waitKey(0)
#释放窗口
cv.destroyAllWindows()