初学python实现OpenCV之边缘保留滤波:高斯双边、均值迁移
程序员文章站
2022-07-14 23:35:16
...
初学python实现OpenCV之边缘保留滤波:高斯双边、均值迁移
高斯双边、均值迁移
高斯双边:
双边滤波函数bilateralFilter()
bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None)
其中:src: 待处理图像、d:过滤期间使用的各像素邻域的直径,如果是非正的,则从SigmaPace计算它。sigmaColor:在颜色空间中过滤Sigma。参数的较大值意味着像素邻域内的更多颜色(参见SigmaSpace)将混合在一起,从而产生更大的半等色区域。
sigmaSpace:在坐标空间中筛选Sigma。参数的较大值意味着只要它们的颜色足够接近(参见SigmaColor),更远的像素会相互影响。当d>0时,它指定邻域大小,而与SigmaPace无关。否则,D与SigmaPace成比例。
均值迁移:
均值漂移函数:cv.pyrMeanShiftFiltering( src, sp, sr[, dst[, maxLevel[, termcrit]]] )
其中:src参数表示输入图像,8位三通道图像、sp参数表示漂移物理空间窗口半径大小、sr参数表示漂移颜色窗口半径大小、dst参数表示和源图象相同大小、相同格式的输出图象、maxLevel参数表示用于分割的金字塔的最大级别、termcrit表示终止标准:何时停止平均移位迭代。
"""边缘保留滤波:高斯双边、均值迁移"""
import cv2 as cv
import numpy as np
# 高斯双边,保留边缘进行模糊,例如美颜功能
def bi_demo(image):
dst = cv.bilateralFilter(image, 0, 100, 15)
cv.imshow("bi_demo", dst)
# 均值迁移,会出现过度模糊,接近油画效果
def shift_demo(image):
dst = cv.pyrMeanShiftFiltering(image, 10, 50)
cv.imshow("bi_demo", dst)
src = cv.imread("D:/Picture/example.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
bi_demo(src)
shift_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()
执行结果: