使用OpenCV批量随机添加运动模糊、高斯噪声和泊松噪声(附Python代码)

一、需求

之前写过一篇博文,二阶降解模拟真实含噪低分辨图像,此方法模拟的效果较好。现总结一个使用OepnCV批量随机添加运动模糊、高斯噪声和泊松噪声代码。

二、代码使用方法

使用代码时,需要修改的地方见下:

在这里插入图片描述
在这里插入图片描述

三、代码

完整代码见下:

import os
import cv2
import numpy as np
import random

src_folder = 'Images/Visible_Images'
dst_folder = 'Images/Visible_Images_addBlurNoise'

# 如果目标文件不存在,则创建它
# os.makedirs(dst_folder,exist_ok = True)

# 添加高斯噪声
def add_gaussian_noise(image,mean=0,stddev=25):
    noise = np.random.normal(mean,stddev,image.shape).astype(np.uint8)
    noise_image = cv2.add(image,noise)
    return noise_image

# 添加泊松噪声
def add_poisson_noise(image,scale=1.0):
    # noise = np.random.poisson(image/255.0*100).astype(np.uint8)
    vals = len(np.unique(image))
    vals = 2 ** np.ceil(np.log2(vals))
    noise = np.random.poisson(image / 255.0 * vals * scale) / float(vals) * 255
    # noise_image = cv2.add(image,noise)
    noise_image = noise.astype(np.uint8)
    return noise_image

# 遍历源文件中的所有文件
for filename in os.listdir(src_folder):
    # 构建完整的文件路径
    src_path = os.path.join(src_folder,filename)

    # 检查文件是否为图片
    # if filename.endswith((".png",".jpg",".jpeg",".bmp",".tiff")):
    if filename.endswith(('.png', '.jpg', '.jpeg', '.bmp', '.tiff')):
        img = cv2.imread(src_path,-1)

        # 检测图片是否读取成功
        if img is not None:
            # 应用高斯模糊,卷积核大小为(3,3)
            blurred_img = cv2.GaussianBlur(img,(3,3),0)

            # 随机决定石头添加高斯噪声或泊松噪声
            if random.choice(['gaussian','poission']) == 'gaussian':
                # 调整高斯噪声的标准差,增大stddev会增加噪声强度
                noise_img = add_gaussian_noise(blurred_img,mean=0, stddev=10)
            else:
                # 调整泊松噪声的scale因子,增大scale会增加噪声强度
                noise_img = add_poisson_noise(blurred_img,scale=1)

            output_name = filename[:-4]+"_GaussianBlurPoissonNoise"+".bmp"
            print(output_name)

            # 构建文件路径
            dst_path = os.path.join(dst_folder,output_name)

            # 保存图像
            cv2.imwrite(dst_path,noise_img)
        else:
            print(f"无法读取图像:{src_path}")
    else:
        print(f"跳过非图像文件:{src_path}")
print("所有图像已经成功添加高斯模糊和随机噪声并保存到指定路径:",dst_folder)

四、效果图

下面,左侧为原图,右侧为模糊加噪效果图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注:由于代码中加噪是随机的,每次运行结果会有差异。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

视觉研坊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值