import random
import numpy as np
def sp_noise(img, prob, sp):
'''
添加椒盐噪声
:param img: 原始图片
:param prob: 噪声比例
:param sp: 0: 椒噪声, 1: 盐噪声, 2: 椒盐噪声
:return: resultImg
'''
resultImg = np.zeros(img.shape, np.uint8)
thres = 1 - prob
for i in range(img.shape[0]):
for j in range(img.shape[1]):
rdn = random.random() # 随机生成0-1之间的数字
if sp == 0:
if rdn < prob: # 如果生成的随机数小于噪声比例则将该像素点添加黑点,即椒噪声
resultImg[i][j] = 0
else:
resultImg[i][j] = img[i][j] # 其他情况像素点不变
if sp == 1:
if rdn > thres: # 如果生成的随机数大于(1-噪声比例)则将该像素点添加白点,即盐噪声
resultImg[i][j] = 255
else:
resultImg[i][j] = img[i][j] # 其他情况像素点不变
if sp == 2:
if rdn < prob: # 如果生成的随机数小于噪声比例则将该像素点添加黑点,即椒噪声
resultImg[i][j] = 0
elif rdn > thres: # 如果生成的随机数大于(1-噪声比例)则将该像素点添加白点,即盐噪声
resultImg[i][j] = 255
else:
resultImg[i][j] = img[i][j] # 其他情况像素点不变
return resultImg
if __name__ == '__main__':
img = cv2.imread('D:/test/test.jpg')
resultImg = sp_noise(img, 0.05, 0)
cv2.imshow('origin', img)
cv2.imshow('result', resultImg)
cv2.waitKey(0)
cv2.destroyAllWindows()
原始图片
添加椒噪声的图片
添加盐噪声的图片
添加椒盐噪声的图片
import numpy as np
def gauss_noise(img, mean, var):
'''
添加高斯噪声
:param img: 原始图像
:param mean: 均值
:param var: 方差,越大,噪声越大
:return: resultImg
'''
image = np.array(img / 255, dtype=float) # 将原始图像的像素值进行归一化,除以255使得像素值在0-1之间
noise = np.random.normal(mean, var ** 0.5, image.shape) # 创建一个均值为mean,方差为var呈高斯分布的图像矩阵
out = image + noise # 将噪声和原始图像进行相加得到加噪后的图像
if out.min() < 0:
low_clip = -1.
else:
low_clip = 0.
resultImg = np.clip(out, low_clip, 1.0) # clip函数将元素的大小限制在了low_clip和1之间了,小于的用low_clip代替,大于1的用1代替
resultImg = np.uint8(resultImg * 255) # 解除归一化,乘以255将加噪后的图像的像素值恢复
return resultImg
if __name__ == '__main__':
img = cv2.imread('D:/test/test.jpg')
resultImg = gauss_noise(img, 0, 0.05)
cv2.imshow('origin', img)
cv2.imshow('result', resultImg)
cv2.waitKey(0)
cv2.destroyAllWindows()
添加高斯噪声的图片