python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)

导读:

这篇文章主要介绍如何利用opencv来对图像添加各类噪声,原图:

1、高斯噪声

高斯噪声就是给图片添加一个服从高斯分布的噪声,可以通过调节高斯分布标准差(sigma)的大小来控制添加噪声程度,sigma越大添加的噪声越多图片损坏的越厉害

1

2

3

4

5

6

7

8

9

10

11

12

13

14

#读取图片

img = cv2.imread("demo.png")

#设置高斯分布的均值和方差

mean = 0

#设置高斯分布的标准差

sigma = 25

#根据均值和标准差生成符合高斯分布的噪声

gauss = np.random.normal(mean,sigma,(img_height,img_width,img_channels))

#给图片添加高斯噪声

noisy_img = image + gauss

#设置图片添加高斯噪声之后的像素值的范围

noisy_img = np.clip(noisy_img,a_min=0,a_max=255)

#保存图片

cv2.imwrite("noisy_img.png",noise_img)

正在上传…重新上传取消正在上传…重新上传取消

2、椒盐噪声

椒盐噪声就是给图片添加黑白噪点,椒指的是黑色的噪点(0,0,0)盐指的是白色的噪点(255,255,255),通过设置amount来控制添加噪声的比例,值越大添加的噪声越多,图像损坏的更加严重

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#读取图片

img = cv2.imread("demo.png")

#设置添加椒盐噪声的数目比例

s_vs_p = 0.5

#设置添加噪声图像像素的数目

amount = 0.04

noisy_img = np.copy(image)

#添加salt噪声

num_salt = np.ceil(amount * image.size * s_vs_p)

#设置添加噪声的坐标位置

coords = [np.random.randint(0,i - 1, int(num_salt)) for i in image.shape]

noisy_img[coords] = 255

#添加pepper噪声

num_pepper = np.ceil(amount * image.size * (1. - s_vs_p))

#设置添加噪声的坐标位置

coords = [np.random.randint(0,i - 1, int(num_pepper)) for i in image.shape]

noisy_img[coords] = 0

#保存图片

cv2.imwrite("noisy_img.png",noise_img)

3、泊松噪声

1

2

3

4

5

6

7

8

9

#读取图片

img = cv2.imread("demo.png")

#计算图像像素的分布范围

vals = len(np.unique(image))

vals = 2 ** np.ceil(np.log2(vals))

#给图片添加泊松噪声

noisy_img = np.random.poisson(image * vals) / float(vals)

#保存图片

cv2.imwrite("noisy_img.png",noise_img)

4、speckle噪声

1

2

3

4

5

6

7

8

9

10

#读取图片

img = cv2.imread("demo.png")

#随机生成一个服从分布的噪声

gauss = np.random.randn(img_height,img_width,img_channels)

#给图片添加speckle噪声

noisy_img = image + image * gauss

#归一化图像的像素值

noisy_img = np.clip(noisy_img,a_min=0,a_max=255)

#保存图片

cv2.imwrite("noisy_img.png",noise_img)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

sinat_40572875

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

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

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

打赏作者

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

抵扣说明:

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

余额充值