边缘保留滤波
1.高斯双边滤波
类似于实现美颜功能
bilateralFilter()函数可以对图像进行双边滤波。
关于2个sigma参数:
- 简单起见,可以令2个sigma的值相等;
- 如果他们很小(小于10),那么滤波器几乎没有什么效果;
- 如果他们很大(大于150),那么滤波器的效果会很强,使图像显得非常卡通化;
关于参数d:
- 过大的滤波器(d>5)执行效率低。
- 对于实时应用,建议取d=5;
- 对于需要过滤严重噪声的离线应用,可取d=9;
- d>0时,由d指定邻域直径;
- d<=0时,d会自动由sigmaSpace的值确定,且d与sigmaSpace成正比;
#引入opencv模块
import cv2 as cv
#引入numpy模块
import numpy as np
#引入sys模块
import sys
#边缘保留滤波
def bi_filter(img):
dst = cv.bilateralFilter(img,0,100,15)
return dst
def img_test():
img = cv.imread('E:/chenopencvblogimg/lena.jpg')
#判断是否读取成功
if img is None:
print("Could not read the image,may be path error")
return
cv.namedWindow("origin Pic",cv.WINDOW_NORMAL)
cv.imshow("origin Pic",img)
img_show = bi_filter(img)
cv.namedWindow("bi_filter",cv.WINDOW_NORMAL)
cv.imshow("bi_filter",img_show)
#让显示等待键盘输入维持在那里,否则程序跑完就闪退啦!
cv.waitKey(0)
#销毁窗口
cv.destroyAllWindows()
if __name__ == '__main__':
sys.exit(img_test() or 0)
2.均值迁移滤波
参数sp,定义的漂移物理空间半径大小;
参数sr,定义的漂移色彩空间半径大小;
#引入opencv模块
import cv2 as cv
#引入numpy模块
import numpy as np
#引入sys模块
import sys
#边缘保留滤波
def bi_filter(img):
dst = cv.bilateralFilter(img,0,100,15)
return dst
#均值迁移滤波
def meanshift_filter(img):
dst = cv.pyrMeanShiftFiltering(img,10,30)
return dst
def img_test():
img = cv.imread('E:/chenopencvblogimg/lena.jpg')
#判断是否读取成功
if img is None:
print("Could not read the image,may be path error")
return
cv.namedWindow("origin Pic",cv.WINDOW_NORMAL)
cv.imshow("origin Pic",img)
img_show = bi_filter(img)
cv.namedWindow("bi_filter",cv.WINDOW_NORMAL)
cv.imshow("bi_filter",img_show)
img_show = meanshift_filter(img)
cv.namedWindow("meanshift_filter",cv.WINDOW_NORMAL)
cv.imshow("meanshift_filter",img_show)
#让显示等待键盘输入维持在那里,否则程序跑完就闪退啦!
cv.waitKey(0)
#销毁窗口
cv.destroyAllWindows()
if __name__ == '__main__':
sys.exit(img_test() or 0)