How to add noise ( Gaussian /salt and pepper etc) to image in Python with OpenCV
在Python中使用OpenCV添加图像噪声的方法有几种,常见的噪声类型包括高斯噪声和盐和胡椒噪声。下面将分别介绍如何添加这两种噪声。1. 高斯噪声高斯噪声是一种统计噪声,其概率密度函数符合正态分布(高斯分布)。添加高斯噪声的一种方法是生成相同尺寸的高斯随机数数组,然后将其添加到原图像上。import numpy as npimport cv2# 读取原始图像image = cv2.imread('path_to_image.jpg')# 获取图像的维度rows, cols, channels = image.shape# 生成高斯噪声mean = 0 # 均值var = 10 # 方差sigma = var ** 0.5gaussian = np.random.normal(mean, sigma, (rows, cols, channels)) # 创建随机数gaussian = gaussian.reshape(rows, cols, channels)# 将高斯噪声添加到原始图像noisy_image = cv2.add(image, gaussian)# 显示图像cv2.imshow('Original', image)cv2.imshow('Gaussian Noise', noisy_image)cv2.waitKey(0)cv2.destroyAllWindows()2. 盐和胡椒噪声盐和胡椒噪声是一种以黑白点出现在图像上的噪声,模拟某些像素随机变为黑色或白色。添加这种噪声可以通过随机选择图像中的像素点,然后将它们设为最高或最低值(通常是255或0)。import numpy as npimport cv2import random# 读取原始图像image = cv2.imread('path_to_image.jpg')# 获取图像的维度rows, cols, channels = image.shape# 盐和胡椒噪声的比例salt_pepper_ratio = 0.02output = np.copy(image)# 添加盐噪声num_salt = np.ceil(salt_pepper_ratio * image.size * 0.5)coords = [np.random.randint(0, i - 1, int(num_salt)) for i in image.shape]output[coords[0], coords[1], :] = 255# 添加胡椒噪声num_pepper = np.ceil(salt_pepper_ratio * image.size * 0.5)coords = [np.random.randint(0, i - 1, int(num_pepper)) for i in image.shape]output[coords[0], coords[1], :] = 0# 显示图像cv2.imshow('Original', image)cv2.imshow('Salt and Pepper Noise', output)cv2.waitKey(0)cv2.destroyAllWindows()在这两种方法中,您可以调整参数(如方差和噪声比)以获得不同程度的噪声效果。这些技术在图像处理中经常用来测试算法的鲁棒性或用于图像增强训练数据。