文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-10-18 13:15

关注

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯