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,对自备图片利用二维高斯模板,对其进行加权平滑滤波,并比较其效果;二维高斯模板为:
文章图片
3,对自备图像之一添加椒盐噪声,再进行中值滤波;
推荐阅读
- EffectiveObjective-C2.0|EffectiveObjective-C2.0 笔记 - 第二部分
- 由浅入深理解AOP
- 继续努力,自主学习家庭Day135(20181015)
- python学习之|python学习之 实现QQ自动发送消息
- Android中的AES加密-下
- 一起来学习C语言的字符串转换函数
- opencv|opencv C++模板匹配的简单实现
- Java|Java OpenCV图像处理之SIFT角点检测详解
- 定制一套英文学习方案
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)