python-opencv 第二讲 滤波(均值、高斯、中值)

首先加载一张照片

import cv2  # BGR
import matplotlib.pyplot as plt
import numpy as np

def cv_show(name,img):
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

img = cv2.imread('lena.jpg')

cv_show('lena',img)

在这里插入图片描述
显然可知,图像上存在大量的椒盐噪声
均值滤波

# 均值滤波
# 简单平均卷积操作
blur = cv2.blur(img,(3,3))
cv_show('lena',blur)
在这里插入代码片

在这里插入图片描述
改善并不好,相反图像变模糊了

高斯滤波

# 高斯滤波
# 高斯模糊的卷积核里的数值是满足高斯分布,相当于更重视中间的
gaussian = cv2.GaussianBlur(img,(5,5),1)
cv_show('lena',gaussian)

在这里插入图片描述
稍稍改善一点
中值滤波

# 中值滤波
# 相当于取中值
median = cv2.medianBlur(img,5)
cv_show('lena',median)

# 可以发现,中值滤波效果最好

在这里插入图片描述
可以看出效果最好
现在我想比较三幅图,有一种方法比较好,如下:

# 这里给大家说一个比较好的方法,一起显示以上,进行效果对比
ret = np.hstack((blur,gaussian,median))
cv_show('ret',ret)
plt.subplot(131),plt.imshow(blur),plt.title('blur')
plt.subplot(132),plt.imshow(gaussian),plt.title('gaussian')
plt.subplot(133),plt.imshow(median),plt.title('median')

在这里插入图片描述
但是有一个很怪的现象,图像色彩变了,那是因为图像先matplit中是BGR,而不是我们常说的RGB,因此会出现上面的情况,于是可以修改一下,编写一个小函数进行改变。

def BGR_RGB(img):
    R,G,B = cv2.split(img) 
    RGB = cv2.merge((B,G,R))
    return RGB

# img = BGR_RGB(blur)
# ret = np.hstack((blur,gaussian,median))
# img = BGR_RGB(ret)
# cv_show('ret',img)
img = BGR_RGB(blur)
plt.imshow(img)
plt.show()
# name = [blur,gaussian,median]
title = ["blur","gaussian","median"]

for i in range(1,4):
    img = BGR_RGB(name[i-1])
    print(i)
    plt.subplot(1,3,i),plt.imshow(img),plt.title(title[i-1])

在这里插入图片描述
(完)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值