1.高斯滤波
1)原理:对图像邻域内像素进行平滑时,邻域内不同位置的像素被赋予不同的权值。
2)特点:对图像进行平滑的同时,同时能够更多的保留图像的总体灰度分布特征。
3)代码
import osfrom PIL import Image, ImageFilterclass MyGaussianBlur(ImageFilter.Filter): name = "GaussianBlur" def __init__(self, radius=2, bounds=None): self.radius = radius self.bounds = bounds def filter(self, image): if self.bounds: clips = image.crop(self.bounds).gaussian_blur(self.radius) image.paste(clips, self.bounds) return image else: return image.gaussian_blur(self.radius)# 源目录input_Path = 'D:/python/bitters/bitter/'# 输出目录Output_Path = 'D:/python/bitters/gaosi_bitter/'def processImage(filesoure, destsoure, name, imgtype): imgtype = 'jpeg' if imgtype == '.jpg' else 'png' # 打开图片 im = Image.open(filesoure + name) # 高斯模糊 image = im.filter(MyGaussianBlur(radius=2.0)) image.save(destsoure + name, imgtype)def run(): # 切换到源目录,遍历源目录下所有图片 os.chdir(input_Path) for i in os.listdir(os.getcwd()): # 检查后缀 postfix = os.path.splitext(i)[1] if postfix == '.jpg' or postfix == '.png': processImage(input_Path, Output_Path, i, postfix)if __name__ == '__main__': run()
4)效果图(左原图)
2.均值滤波
1)原理:均值滤波采用线性的方法,使用模板内所有像素的平均值代替模板中心像素灰度值。
2)特点:不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。
3)代码
import cv2 as cvimport os# 指定输入和输出文件夹的路径input_dir = 'D:/python/bitters/bitter/'output_dir = 'D:/python/bitters/junzhi_bitter/'# 如果输出文件夹不存在,就创建它if not os.path.exists(output_dir): os.makedirs(output_dir)# 遍历输入文件夹中的所有文件for filename in os.listdir(input_dir): # 如果文件是图像文件,就处理它 if filename.endswith(".jpg") or filename.endswith(".png"): # 拼接完整的文件路径 input_path = os.path.join(input_dir, filename) output_path = os.path.join(output_dir, filename) # 读取图像 img = cv.imread(input_path) # 判断是否读取成功 if img is not None: # 对图像进行均值滤波,指定核大小为5x5 blur = cv.blur(img, (25,25)) #数值可根据自己需要进行修改 # 将结果保存到输出文件夹 cv.imwrite(output_path, blur)
4)效果图(左原图)
3.中值滤波
1)原理:中值滤波采用非线性的方法,计算模板内所有像素中的中值,并用所计算出来的中值体改模板中心像素的灰度值。
2)特点:它在平滑脉冲噪声方面非常有效,同时它可以保护图像尖锐的边缘,选择适当的点来替代污染点的值,所以处理效果好。
3)代码
import cv2import os# 指定输入和输出文件夹的路径input_folder='D:/python/bitters/bitter'output_folder='D:/python/bitters/zhongzhi_bitter/'#数值可根据自己需要进行修改kernel_size=21 def batch_median_blur(input_folder, output_folder, kernel_size): # 检查输出文件夹是否存在,若不存在则创建 if not os.path.exists(output_folder): os.makedirs(output_folder) # 遍历输入文件夹中的所有图像文件 for filename in os.listdir(input_folder): if filename.endswith('.jpg') or filename.endswith('.png'): # 读取图像 image_path = os.path.join(input_folder, filename) image = cv2.imread(image_path) # 对图像进行中值模糊 blurred_image = cv2.medianBlur(image, kernel_size) # 保存处理后的图像到输出文件夹 output_path = os.path.join(output_folder, filename) cv2.imwrite(output_path, blurred_image) print(f'Processed {filename}')if __name__ == '__main__': batch_median_blur(input_folder, output_folder, kernel_size)
4)效果图(左原图)
来源地址:https://blog.csdn.net/weixin_53868909/article/details/131134515