1、建立灰度化和噪声的子文件:gray_and_noise
#将一张图片灰度化,并添加椒盐噪声
import cv2
import numpy as np
#灰度化
def gray(img):
row,col,tong = img.shape
new = np.zeros((row,col,tong),np.uint8())
for r in range(row):
for c in range(col):
the_value = 0.11*img[r,c,0] + 0.58*img[r,c,1] + 0.31*img[r,c,2]
new[r,c]=np.uint8(the_value)
return new
'''
添加椒盐噪声
椒盐噪声=椒噪声(0)+盐噪声(255),噪声值为0或255,假定它们等概率出现
'''
def add_salt(img,SNR): #SNR:信息噪声比 signal-noise rate
row,col,tong = img.shape
amount=row*col
for i in range(int(amount*(1-SNR))):
rand_x=np.random.randint(0,row)
rand_y=np.random.randint(0,col)
if np.random.random() <0.5: #np.random.random()可以生成一个0-1之间的浮点数
value=0
else:
value=255
img[rand_x,rand_y] = value
return img
if __name__ =='__main__':
img_1=cv2.imread('las.jpg',cv2.IMREAD_UNCHANGED)
gray_jpg = gray(img_1)
the_new = add_salt(gray_jpg,0.95)
cv2.imshow('windows',the_new)
cv2.waitKey(0)
cv2.destroyAllWindows()
2、滤波方法子文件:filter_h
#滤波方法子文件
import cv2
import numpy as np
def trans(img): #将bgr转换为rgb,不转换也没什么影响
img1=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
return img1
def blur_f(img): #均值滤波
img1=trans(img)
img2=cv2.blur(img1,(3,3)) #blur是模糊的意思
return img2
def gauss_f(img): #高斯滤波
img1=trans(img)
img2=cv2.GaussianBlur(img1,(3,3),0) #0为方差,方差越小,偏离中心的像素权重会很小
return img2
def med_f(img): #中值滤波
img1=trans(img)
img2=cv2.medianBlur(img1,3)
return img2
3、主文件
import cv2
import numpy as np
import gray_and_noise as gn
import filter_h as fh
img=cv2.imread('las.jpg',cv2.IMREAD_UNCHANGED)
gray_pic=gn.gray(img)
noise_pic=gn.add_salt(gray_pic,0.96)
cv2.imshow('pic',noise_pic)
#调用滤波函数
result1=fh.blur_f(noise_pic) #均值滤波
cv2.imshow('result1',result1)
result2=fh.gauss_f(noise_pic) #高斯滤波
cv2.imshow('gauss',result2)
result3=fh.med_f(noise_pic)
cv2.imshow('med',result3)