📜  使用Python为图像添加“盐和胡椒”噪声(1)

📅  最后修改于: 2023-12-03 15:22:19.689000             🧑  作者: Mango

使用Python为图像添加“盐和胡椒”噪声

简介

在数字图像处理中,添加噪声是一种常见的技术。其中,盐和胡椒噪声是最普遍和最常见的噪声之一。在这种噪声下,图像中的一些像素会变成白色或黑色,使图像看起来受到污染。

在本文中,我们将使用Python编程语言来添加“盐和胡椒”噪声到图像中。

需求
  • Python 3.x
  • numpy
  • cv2
实现步骤
1. 导入必要的库
import cv2
import numpy as np
2. 加载图像

我们可以使用OpenCV将图像导入到Python程序中。

img = cv2.imread('image.jpg')
3. 添加盐和胡椒噪声

为了添加“盐和胡椒”噪声,我们需要知道噪声点的位置。我们可以使用numpy的random函数来生成一些随机数,并将其乘以图像的高度和宽度,以获得噪声点的坐标。

h, w = img.shape[:2]
sp_ratio = 0.05  # 盐和胡椒噪声的比例
noise_count = int(h * w * sp_ratio)
xy = np.random.randint(0, h, noise_count), np.random.randint(0, w, noise_count)  # 噪声的位置

根据上面的坐标,我们可以将噪声点的像素设为最大值或最小值。在这个案例中,我们将盐噪声的像素值设为255,将胡椒噪声的像素值设为0。

salt = np.zeros((h, w), dtype=np.uint8)
salt[xy] = 255  # 盐噪声

pepper = np.zeros((h, w), dtype=np.uint8)
pepper[xy] = 0  # 胡椒噪声
4. 合并原始图像和噪声

现在,我们可以将原始图像和噪声合并起来。

img_salt = cv2.add(img, cv2.merge((salt, salt, salt)))  # 添加盐噪声
img_sp = cv2.add(img_salt, cv2.merge((pepper, pepper, pepper)))  # 添加胡椒噪声

在这里,我们使用OpenCV的add函数来执行图像合并。我们将原始图像和噪声分别合并为盐噪声和盐和胡椒噪声图像。

5. 显示结果

最后,我们可以使用OpenCV的imshow函数来显示图像。我们可以使用“盐和胡椒”图像作为结果。

cv2.imshow('Salt and Pepper Noise', img_sp)  # 显示盐和胡椒噪声图像
cv2.waitKey(0)  # 等待按键
cv2.destroyAllWindows()  # 关闭窗口
完整代码

完整代码如下:

import cv2
import numpy as np

# 加载图像
img = cv2.imread('image.jpg')

# 添加盐和胡椒噪声
h, w = img.shape[:2]
sp_ratio = 0.05  # 盐和胡椒噪声的比例
noise_count = int(h * w * sp_ratio)
xy = np.random.randint(0, h, noise_count), np.random.randint(0, w, noise_count)  # 噪声的位置

salt = np.zeros((h, w), dtype=np.uint8)
salt[xy] = 255  # 盐噪声

pepper = np.zeros((h, w), dtype=np.uint8)
pepper[xy] = 0  # 胡椒噪声

img_salt = cv2.add(img, cv2.merge((salt, salt, salt)))  # 添加盐噪声
img_sp = cv2.add(img_salt, cv2.merge((pepper, pepper, pepper)))  # 添加胡椒噪声

# 显示结果
cv2.imshow('Salt and Pepper Noise', img_sp)  # 显示盐和胡椒噪声图像
cv2.waitKey(0)  # 等待按键
cv2.destroyAllWindows()  # 关闭窗口
参考资料