当前位置:   article > 正文

python实现对图片进行均值滤波、中值滤波、高斯滤波处理及其原理和特点_python 均值滤波

python 均值滤波

1.高斯滤波

        1)原理:对图像邻域内像素进行平滑时,邻域内不同位置的像素被赋予不同的权值。

        2)特点:对图像进行平滑的同时,同时能够更多的保留图像的总体灰度分布特征。

        3)代码

  1. import os
  2. from PIL import Image, ImageFilter
  3. class MyGaussianBlur(ImageFilter.Filter):
  4. name = "GaussianBlur"
  5. def __init__(self, radius=2, bounds=None):
  6. self.radius = radius
  7. self.bounds = bounds
  8. def filter(self, image):
  9. if self.bounds:
  10. clips = image.crop(self.bounds).gaussian_blur(self.radius)
  11. image.paste(clips, self.bounds)
  12. return image
  13. else:
  14. return image.gaussian_blur(self.radius)
  15. # 源目录
  16. input_Path = 'D:/python/bitters/bitter/'
  17. # 输出目录
  18. Output_Path = 'D:/python/bitters/gaosi_bitter/'
  19. def processImage(filesoure, destsoure, name, imgtype):
  20. imgtype = 'jpeg' if imgtype == '.jpg' else 'png'
  21. # 打开图片
  22. im = Image.open(filesoure + name)
  23. # 高斯模糊
  24. image = im.filter(MyGaussianBlur(radius=2.0))
  25. image.save(destsoure + name, imgtype)
  26. def run():
  27. # 切换到源目录,遍历源目录下所有图片
  28. os.chdir(input_Path)
  29. for i in os.listdir(os.getcwd()):
  30. # 检查后缀
  31. postfix = os.path.splitext(i)[1]
  32. if postfix == '.jpg' or postfix == '.png':
  33. processImage(input_Path, Output_Path, i, postfix)
  34. if __name__ == '__main__':
  35. run()

        4)效果图(左原图)

 2.均值滤波

        1)原理:均值滤波采用线性的方法,使用模板内所有像素的平均值代替模板中心像素灰度值

        2)特点:不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。

        3)代码

  1. import cv2 as cv
  2. import os
  3. # 指定输入和输出文件夹的路径
  4. input_dir = 'D:/python/bitters/bitter/'
  5. output_dir = 'D:/python/bitters/junzhi_bitter/'
  6. # 如果输出文件夹不存在,就创建它
  7. if not os.path.exists(output_dir):
  8. os.makedirs(output_dir)
  9. # 遍历输入文件夹中的所有文件
  10. for filename in os.listdir(input_dir):
  11. # 如果文件是图像文件,就处理它
  12. if filename.endswith(".jpg") or filename.endswith(".png"):
  13. # 拼接完整的文件路径
  14. input_path = os.path.join(input_dir, filename)
  15. output_path = os.path.join(output_dir, filename)
  16. # 读取图像
  17. img = cv.imread(input_path)
  18. # 判断是否读取成功
  19. if img is not None:
  20. # 对图像进行均值滤波,指定核大小为5x5
  21. blur = cv.blur(img, (25,25)) #数值可根据自己需要进行修改
  22. # 将结果保存到输出文件夹
  23. cv.imwrite(output_path, blur)

        4)效果图(左原图)

 3.中值滤波

        1)原理:中值滤波采用非线性的方法,计算模板内所有像素中的中值,并用所计算出来的中值体改模板中心像素的灰度值。

        2)特点:它在平滑脉冲噪声方面非常有效,同时它可以保护图像尖锐的边缘,选择适当的点来替代污染点的值,所以处理效果好。

        3)代码

  1. import cv2
  2. import os
  3. # 指定输入和输出文件夹的路径
  4. input_folder='D:/python/bitters/bitter'
  5. output_folder='D:/python/bitters/zhongzhi_bitter/'
  6. #数值可根据自己需要进行修改
  7. kernel_size=21
  8. def batch_median_blur(input_folder, output_folder, kernel_size):
  9. # 检查输出文件夹是否存在,若不存在则创建
  10. if not os.path.exists(output_folder):
  11. os.makedirs(output_folder)
  12. # 遍历输入文件夹中的所有图像文件
  13. for filename in os.listdir(input_folder):
  14. if filename.endswith('.jpg') or filename.endswith('.png'):
  15. # 读取图像
  16. image_path = os.path.join(input_folder, filename)
  17. image = cv2.imread(image_path)
  18. # 对图像进行中值模糊
  19. blurred_image = cv2.medianBlur(image, kernel_size)
  20. # 保存处理后的图像到输出文件夹
  21. output_path = os.path.join(output_folder, filename)
  22. cv2.imwrite(output_path, blurred_image)
  23. print(f'Processed {filename}')
  24. if __name__ == '__main__':
  25. batch_median_blur(input_folder, output_folder, kernel_size)

    4)效果图(左原图)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/133128
推荐阅读
相关标签
  

闽ICP备14008679号