用python对一张图片进行噪声攻击
时间: 2023-05-25 12:05:37 浏览: 123
首先,我们需要导入需要使用的库:
```
import cv2
import numpy as np
import random
```
其中,cv2是OpenCV的Python接口库,用于图像处理;numpy是Python中的数学库,用于数学计算;random是Python中的随机数库,用于生成噪声。
读入图片并显示:
```
img = cv2.imread('test.jpg')
cv2.imshow('original', img)
```
生成噪声函数:
```
def add_noise(img):
h, w, c = img.shape
# 均值为0, 方差为0.1的正态分布
noise = np.random.normal(loc=0, scale=50, size=(h, w, c))
noisy_img = img + noise
# 将像素值限制在0-255之间
noisy_img = np.clip(noisy_img, 0, 255).astype(np.uint8)
return noisy_img
```
在函数中,我们使用了numpy中的np.random.normal函数来生成均值为0,方差为0.1的正态分布噪声。这里,loc参数为均值,scale参数为标准差。
将噪声添加到图片中:
```
noisy_img = add_noise(img)
cv2.imshow('noisy', noisy_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
最后,我们可以将生成的噪声图片保存:
```
cv2.imwrite('noisy.jpg', noisy_img)
```
完整代码如下:
```
import cv2
import numpy as np
import random
def add_noise(img):
h, w, c = img.shape
# 均值为0, 方差为0.1的正态分布
noise = np.random.normal(loc=0, scale=50, size=(h, w, c))
noisy_img = img + noise
# 将像素值限制在0-255之间
noisy_img = np.clip(noisy_img, 0, 255).astype(np.uint8)
return noisy_img
img = cv2.imread('test.jpg')
cv2.imshow('original', img)
noisy_img = add_noise(img)
cv2.imshow('noisy', noisy_img)
cv2.imwrite('noisy.jpg', noisy_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文