opencv|学习笔记-使用Python对含有椒盐噪声的图像进行均值滤波,高斯滤波和中值滤波

import cv2 as cv from pylab import * from scipy import ndimage import matplotlib.pyplot as plt import random # ....................................................................................... # ..................................我是分界线............................................. # ....................................................................................... def pepper_and_salt(img,percentage):# 第一个参量为输入的图片,第二个是噪声占图片像素的百分比 num = int(percentage*img.shape[0]*img.shape[1])# 计算椒盐噪声点数量 random.randint(0, img.shape[0])# 参数1、参数2必须是整数函数;返回值是参数1和参数2之间的任意整数生成随机位置 img2 = img.copy()# 浅度复制,复制的数不会随着被复制数的嵌套序列的元素的改变而改变; for i in range(num): X=random.randint(0,img2.shape[0]-1)# 从0到图像长度之间的一个随机整数,因为是闭区间所以-1 Y=random.randint(0,img2.shape[1]-1) if random.randint(0,1) ==0:# 黑白色概率55开 img2[X,Y] = (255,255,255)# 白色 else: img2[X,Y] =(0,0,0)# 黑色 return img2# ..................................我是分界线.............................................if __name__ == '__main__': #对自备图片进行均值滤波 plt.ion() # 读取图片 img = cv.imread("g07.tif")# pycharm文件和图片在同一个文件夹里,故可直接写图片名称来表示路径 # 加入噪音 img = pepper_and_salt(img, 0.01) source = cv.cvtColor(img, cv.COLOR_BGR2RGB)# 颜色空间转换函数 # 均值滤波 result = cv.blur(source, (5, 5))# 以周围5x5的像素值为依据进行滤波,越大越模糊 # 显示图形 titles = ['Source Image', 'Blur Image'] images = [source, result] for i in range(2):# 将两个图合并为一个图输出 plt.subplot(1, 2, i + 1)# plt.subplot(i,j,n)形式,其中ij是行列数,n是第几个图 plt.imshow(images[i])# 对图像进行处理,并显示其格式, plt.title(titles[i])# 设置图像标题 plt.xticks([]), plt.yticks([]) plt.show()# plt.show则是将plt.imshow处理后的函数显示出来 plt.pause(3)# 该句显示图片3秒 plt.close()# 清空窗口# 高斯模糊模板与均值模板比较 kernel_3X3 = np.array([# 产生二维数组 [1/16, 2/16, 1/16], [2/16, 4/16, 2/16], [1/16, 2/16, 1/16], ]) gray = cv.cvtColor(source, cv.COLOR_BGR2GRAY)# 将彩色图片变为灰度图 out = cv.GaussianBlur(gray, (3, 3), 1.3)# cv库自带的高斯模糊——3X3模板 标准差为 1.3 cv.imshow('GaussianBlur', out)# 高斯模糊处理后的图片显示 kernel_3X3 = kernel_3X3/kernel_3X3.sum()# .sum()是对序列进行求和,在这里这段代码无意义 k = ndimage.convolve(gray, kernel_3X3, mode='constant', cval=0.0)# 卷积 # ndimage.convolve()第一个参数表示输入的一维数组,第二个参数是输入的二维数组 # mode='reflect'(默认值),外部值会反映在输入的边以填充缺失值。 # mode='constant', cval=0.0表示边界补0;mode='constant', cval=1.0表示边界补1 cv.imshow("Blur", k)# 图片显示 cv.waitKey(5000) cv.destroyAllWindows()#添加椒盐噪声 img = cv.imread("g07.tif") img1 = pepper_and_salt(img, 0.05)# 百分之5的椒盐噪音 img_median = cv.medianBlur(img1, 3)# 中值滤波 htitch = np.hstack((img1, img_median)) # 将添加噪声的图和中值滤波后的图合并到一起显示 cv.imshow("pepper_and_salt", htitch) cv.waitKey(5000) cv.destroyAllWindows()

二、图象平滑
1,对自备图片(封面图图)进行均值滤波(自选模板大小)
【opencv|学习笔记-使用Python对含有椒盐噪声的图像进行均值滤波,高斯滤波和中值滤波】2,对自备图片利用二维高斯模板,对其进行加权平滑滤波,并比较其效果;二维高斯模板为:
opencv|学习笔记-使用Python对含有椒盐噪声的图像进行均值滤波,高斯滤波和中值滤波
文章图片


3,对自备图像之一添加椒盐噪声,再进行中值滤波;

    推荐阅读