python图片添加噪声
时间: 2023-07-17 20:02:08 浏览: 47
你可以使用Python中的PIL库来添加噪声到图片中。下面是一个简单的示例代码:
```python
from PIL import Image
import numpy as np
def add_noise(image, noise_type='gaussian', strength=0.1):
"""
给图片添加噪声
:param image: PIL图像对象
:param noise_type: 噪声类型,可选 'gaussian', 'salt', 'pepper', 's&p', 'speckle'
:param strength: 噪声强度,取值范围为 [0, 1]
:return: 添加噪声后的图像
"""
if noise_type == 'gaussian':
row, col = image.size
mean = 0
var = strength * 255
sigma = var ** 0.5
gauss = np.random.normal(mean, sigma, (row, col)).reshape(row, col)
noisy_image = np.clip(image + gauss, 0, 255).astype(np.uint8)
return Image.fromarray(noisy_image)
elif noise_type == 'salt':
row, col = image.size
num_salt = int(strength * row * col)
coords = [np.random.randint(0, i - 1, num_salt) for i in image.shape]
noisy_image = image.copy()
noisy_image[coords] = 255
return Image.fromarray(noisy_image)
elif noise_type == 'pepper':
row, col = image.size
num_pepper = int(strength * row * col)
coords = [np.random.randint(0, i - 1, num_pepper) for i in image.shape]
noisy_image = image.copy()
noisy_image[coords] = 0
return Image.fromarray(noisy_image)
elif noise_type == 's&p':
row, col = image.size
num_salt = int(strength * row * col)
num_pepper = int(strength * row * col)
coords_salt = [np.random.randint(0, i - 1, num_salt) for i in image.shape]
coords_pepper = [np.random.randint(0, i - 1, num_pepper) for i in image.shape]
noisy_image = image.copy()
noisy_image[coords_salt] = 255
noisy_image[coords_pepper] = 0
return Image.fromarray(noisy_image)
elif noise_type == 'speckle':
row, col = image.size
speckle = np.random.randn(row, col) * strength * 255
noisy_image = np.clip(image + image * speckle, 0, 255).astype(np.uint8)
return Image.fromarray(noisy_image)
else:
raise ValueError("Invalid noise_type. Available options are: 'gaussian', 'salt', 'pepper', 's&p', 'speckle'.")
# 读取原始图片
image = Image.open('path/to/image.jpg')
# 添加高斯噪声
noisy_image = add_noise(image, noise_type='gaussian', strength=0.1)
# 显示原始图片和添加噪声后的图片
image.show()
noisy_image.show()
```
在上述代码中,`add_noise` 函数接受一张PIL图像对象,噪声类型和噪声强度作为参数,并返回添加噪声后的图像。你可以根据需要选择不同的噪声类型,如高斯噪声、椒盐噪声等,并调整噪声强度来控制噪声的程度。最后,你可以使用 `show` 方法来显示原始图片和添加噪声后的图片。