一个小实验,只是学习下Python语法而已
import cv2
import numpy as np
from PIL import Image
from numpy import*
from pylab import*
import random
path = 'E:/zhz/'
def salt(img,n):
for k in range(n):
i = int(np.random.random()*img.shape[1])
j = int(np.random.random()*img.shape[0])
if img.ndim ==2:
img[j,i] = 255
elif img.ndim == 3:
img[j,i,0] = 255
img[j,i,1] = 255
img[j,i,2] = 255
return img
def splitImg(img):
r = img[:,:,0]
g = img[:,:,1]
b = img[:,:,2]
return r,g,b
if __name__ == '__main__':
SNR = 0.9#信噪比
img = cv2.imread(path+'lena.jpg',1)
cleanimg = cv2.imread(path+'copy_lena.jpg',1)
cleanR,cleanG,cleanB = splitImg(cleanimg)
noiseNum = int((1-SNR)*img.shape[0]*img.shape[1])
saltImage = salt(img,noiseNum)
noiseR,noiseG,noiseB = splitImg(saltImage)
denoiseR = np.zeros((noiseR.shape[0],noiseR.shape[1]),dtype=img.dtype)
denoiseG = np.zeros((noiseG.shape[0],noiseG.shape[1]),dtype=img.dtype)
denoiseB = np.zeros((noiseB.shape[0],noiseB.shape[1]),dtype=img.dtype)
denoise = np.zeros((img.shape[0],img.shape[1]),dtype=img.dtype)
for i in range(noiseR.shape[0]):
for j in range(noiseR.shape[1]):
denoiseR[i,j] = np.abs(cleanR[i,j]-noiseR[i,j])
denoiseG[i,j] = np.abs(cleanR[i,j]-noiseR[i,j])
denoiseB[i,j] = np.abs(cleanB[i,j]-noiseB[i,j])
denoise = cv2.merge([denoiseR,denoiseG,denoiseB])
cv2.imshow("denoise",denoise)
cv2.waitKey(0)
cv2.destroyAllWindows()