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

这篇具有很好参考价值的文章主要介绍了python实现对图片进行均值滤波、中值滤波、高斯滤波处理及其原理和特点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.高斯滤波

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

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

        3)代码

import os
from PIL import Image, ImageFilter


class 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)效果图(左原图)

python 均值滤波,python,开发语言

python 均值滤波,python,开发语言

 2.均值滤波

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

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

        3)代码

import cv2 as cv
import 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)效果图(左原图)

python 均值滤波,python,开发语言

python 均值滤波,python,开发语言

 3.中值滤波

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

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

        3)代码

import cv2
import 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)效果图(左原图)

python 均值滤波,python,开发语言

python 均值滤波,python,开发语言文章来源地址https://www.toymoban.com/news/detail-741003.html

到了这里,关于python实现对图片进行均值滤波、中值滤波、高斯滤波处理及其原理和特点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包