机器学习进阶-阈值与平滑-图像平滑操作(去噪操作) 1. cv2.blur(均值滤波) 2.cv2.boxfilter(方框滤波) 3. cv2.Guassiannblur(进行高斯滤波) 4. cv2.medianBlur(进行中值滤波)
原文:https://www.cnblogs.com/my-love-is-python/p/10391923.html
1.cv2.blur(img, (3, 3)) 进行均值滤波
参数说明:img表示输入的图片, (3, 3) 表示进行均值滤波的方框大小
2. cv2.boxfilter(img, -1, (3, 3), normalize=True) 表示进行方框滤波,
参数说明当normalize=True时,与均值滤波结果相同, normalize=False,表示对加和后的结果不进行平均操作,大于255的使用255表示
3. cv2.Guassianblur(img, (3, 3), 1) 表示进行高斯滤波,
参数说明: 1表示σ, x表示与当前值得距离,计算出的G(x)表示权重值
4. cv2.medianBlur(img, 3) #中值滤波,相当于将9个值进行排序,取中值作为当前值
参数说明:img表示当前的图片,3表示当前的方框尺寸
在图像的读取中,会存在一些躁声点,如一些白噪声,因此我们需要进行去躁操作
代码:
1.原始图片的输入
2.使用cv2.blur进行均值滤波
3.使用cv2.boxfilter 进行方框滤波, 比较normalize=True or normalize=False
4.使用cv2.GussianBlur 进行高斯滤波
5. 使用cv2.medianBlur 进行中值滤波
6.做一个合并显示
import cv2 import numpy as np # 1.图片中存在一些噪音点 img = cv2.imread('lenaNoise.png') cv2.imshow('original', img) cv2.waitKey(0) cv2.destroyAllWindows()
# 2. cv2.blur 使用均值滤波,即当对一个值进行滤波时,使用当前值与周围8个值之和,取平均做为当前值 mean = cv2.blur(img, (3, 3)) cv2.imshow('mean', mean) cv2.waitKey(0) cv2.destroyAllWindows()
# 3. cv2.boxFilter 表示进行方框滤波 box = cv2.boxFilter(img, -1, (3, 3), normalize=True) cv2.imshow('box', box) cv2.waitKey(0) cv2.destroyAllWindows() # 当normalize=False 表示对加和后的9个点,不进行求平均的操作,如果加和后的值大于255,使用255表示 box_1 = cv2.boxFilter(img, -1, (3, 3), normalize=False) cv2.imshow('box_1', box_1) cv2.waitKey(0) cv2.destroyAllWindows()
# 4. cv2.GaussianBlur 根据高斯的距离对周围的点进行加权,求平均值1,0.8, 0.6, 0.8 gaussian = cv2.GaussianBlur(img, (5, 5), 1) cv2.imshow('gaussian', gaussian) cv2.waitKey(0) cv2.destroyAllWindows()
# 5. cv2.medianBlur #将9个数据从小到大排列,取中间值作为当前值 median = cv2.medianBlur(img, 3) cv2.imshow('median', median) cv2.waitKey(0) cv2.destroyAllWindows()
# 6. 做一个合并显示 imags = np.vstack((mean, gaussian, median)) cv2.imshow('all', imags) cv2.waitKey(0) cv2.destroyAllWindows()
作者:柒月
Q群 :2122210(嵌入式/机器学习)