python 给图片添加噪声

import numpy as np
import cv2
import matplotlib.pyplot as plt
import skimage
from skimage import io
import random

def addGaussNoise(origin,var=0.0005):#添加高斯噪声函数
    var = random.uniform(0.0001, 0.04)
    noisy = skimage.util.random_noise(origin, mode='gaussian', var=var)
    return noisy

def addSaltNoise(origin,var=0.01):#添加椒盐噪声函数
    var = random.uniform(0.01, 0.2)
    noisy = skimage.util.random_noise(origin, mode='s&p', amount=var)
    return noisy

def addSpeckleNoise(origin,var=0.001):#添加乘法噪声函数
    var = random.uniform(0.0001, 0.04)
    noisy = skimage.util.random_noise(origin, mode='speckle', var=var)
    return noisy
# img = cv2.imread('img1.png',cv2.IMREAD_GRAYSCALE)
# img = plt.imread('img1.png')
img=io.imread('img1.png')
fig=plt.figure(figsize=(10, 50))
img = addGaussNoise(img)
img1 = addSaltNoise(img)
img2 = addSpeckleNoise(img)

plt.subplot(2,2,1),plt.imshow(img,'gray'),plt.title('original')
plt.subplot(2,2,2),plt.imshow(img,'gray'),plt.title('img_add_gaussin')
plt.subplot(2,2,3),plt.imshow(img1,'gray'),plt.title('SaltNoise')
plt.subplot(2,2,4),plt.imshow(img2,'gray'),plt.title('SpeckleNoise')
plt.show()

import numpy as np
import random
import cv2

def sp_noise(image,prob):
    '''
    添加椒盐噪声
    盐粒噪声salt : 是指灰度值突变成白色点的噪声(白色--->255)
    胡椒噪声pepper:是指灰度值突变成黑色点的噪声(黑色--->0)
    prob:盐粒噪声
    prob:胡椒噪声
    '''
    output = np.zeros(image.shape,np.uint8)
    thres = 1 - prob
    for i in range(image.shape[0]):
        for j in range(image.shape[1]):
            #生成随机数
            rdn = random.random()
            if rdn < prob:
                output[i][j] = 0
            elif rdn > thres:
                output[i][j] = 255
            else:
                output[i][j] = image[i][j]
    return output


def gasuss_noise(image, mean=0, var=0.01):
    '''
        添加高斯噪声
        mean : 均值
        var : 方差
    '''
    image = np.array(image/255, dtype=float)
    ##生成均值,方差的类似Image矩阵
    noise = np.random.normal(mean, var ** 0.5, image.shape)
    out = image + noise
    if out.min() < 0:
        low_clip = -1.
    else:
        low_clip = 0.
    out = np.clip(out, low_clip, 1.0)
    out = np.uint8(out*255)
    return out
img=cv2.imread('img1.png')
out1=sp_noise(img,0.05)
out2=gasuss_noise(img)
cv2.imshow('img',np.hstack((img,out1,out2)))
cv2.imwrite('image.png',np.hstack((img,out1,out2)))
cv2.waitKey()

 

 

 

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一壶浊酒..

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

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

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

打赏作者

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

抵扣说明:

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

余额充值