opencv+python椒盐噪声之椒噪声
的有关信息介绍如下:在学习opencv过程中,加盐噪声和加椒噪声是必须要经过的历程,通过对自己对加盐代码的学习和编写,为后面的滤波处理提供不少助益。上文介绍加盐噪声代码。本文是加椒噪声代码。
所谓椒噪声,简单的说就是图片或图像中的随机暗点或黑点。就是在图片或图像上出现黑色随机噪声点。
例如:下图所示就是加椒500的示意图。
和原图比对,在暗色背景上看,白色噪点还是比较明显的。
源代码如下:
#加椒
def PepperNoise(srcimg,Peppernum):
PepperNoise_img = srcimg.copy()
for k in range(Peppernum):
#随机坐标
rows = np.random.randint(0, srcimg.shape - 1)
# 随机坐标
cols = np.random.randint(0, srcimg.shape - 1)
channel = srcimg.shape
if (channel == 1): #灰度
PepperNoise_img[rows, cols, 0] = 0
else:
if (channel == 3): #彩色
PepperNoise_img[rows, cols, 0] = 0
PepperNoise_img[rows, cols, 1] = 0
PepperNoise_img[rows, cols, 2] = 0
return PepperNoise_img
image = cv.imread('c:\\meiping1.png')
PepperNoise_img = PepperNoise(image,500) #1000
cv.imshow('PepperNoise_img', PepperNoise_img)
cv.waitKey(0)
import cv2 as cv
import numpy as np
import copy
import random
#......
#调用代码:
image = cv.imread('c:\\meiping1.png')
PepperNoise_img = PepperNoise(image,500) #1000
cv.imshow('PepperNoise_img', PepperNoise_img)
cv.waitKey(0)
修改加椒数量:
PepperNoise_img = PepperNoise(image,1000) #加1000数量
可以看出黑点明显增多。
#同时加椒盐 per :噪声占比 彩图
image = cv.imread('c:\\meiping1.png')
height = image.shape
width = image.shape
channels = image.shape
per = 0.05 #噪声占比 已经比较明显了 0.1 严重影响画质
per = 0.1
NoiseImg = image.copy()
NoiseNum = int(per * image.shape * image.shape)
print(NoiseNum)
for i in range(NoiseNum):
rows = np.random.randint(0, image.shape - 1)
cols = np.random.randint(0, image.shape - 1)
#channel = np.random.randint(0, 3)
# if np.random.randint(0, 2) == 0:#随机加盐或者加椒
if (1): # 0: 加盐 1:加椒
NoiseImg[rows, cols, 0] = 0
NoiseImg[rows, cols, 1] = 0
NoiseImg[rows, cols, 2] = 0
else:
NoiseImg[rows, cols, 0] = 255
NoiseImg[rows, cols, 1] = 255
NoiseImg[rows, cols, 2] = 255
cv.imshow('SP比例NoiseImg', NoiseImg)
cv.waitKey(0)
将per 改成0.1 图像质量下降的很厉害。
这样就可以比较容易控制噪声数量,方便程序调试。
还可以修改程序 同时加椒盐 并且控制椒盐各自的占比。