Python OpenCV从入门到精通——第十一章——滤波器

import cv2
#图形的平滑处理(模糊处理):去除图形内噪声(与周围像素格格不入的像素,高亮度)降低细节层次信息  常用工具:滤波器
#滤波核:以一个像素为核心,其周围元素组成n行n列矩阵
#   前三种滤波器方法使得整幅图像平滑,最后一种可有效保护边界信息
#           ——————————————————————————均值(低通)滤波器:把每个元素都当成滤波核的核心,计算核内所有像素平均值,让滤波核像素等于这个平均值
#   dst = cv2.blur(src,ksize,anchor,borderType)     参数依次是:滤波核大小格式为(高度,宽度)滤波核越大处理后图像越模糊,滤波核的锚点(可选),边界样式(可选)
#   中值滤波器ksize为边长其他滤波器ksize都为(高,宽)
img = cv2.imread("amygdalus triloba.jpg")  # 读取原图
dst1 = cv2.blur(img, (3, 3))                        # 使用大小为3*3的滤波核进行均值滤波
dst2 = cv2.blur(img, (5, 5))                        # 使用大小为5*5的滤波核进行均值滤波
dst3 = cv2.blur(img, (9, 9))                        # 使用大小为9*9的滤波核进行均值滤波
cv2.imshow("img", img)
cv2.imshow("3*3", dst1)
cv2.imshow("5*5", dst2)
cv2.imshow("9*9", dst3)
cv2.waitKey()
cv2.destroyAllWindows()


#           ——————————————————————————中值滤波器:类似均值滤波器,不同:不计算均值,将所有像素值排序,选择中间值赋给核心元素
#   dst = cv2.medianBlur(src,ksize)                参数依次是:滤波核的边长必须为大于1的奇数
img = cv2.imread("amygdalus triloba.jpg")
dst1 = cv2.medianBlur(img, 3)                       # 使用宽度为3的滤波核进行中值滤波
dst2 = cv2.medianBlur(img, 5)                       # 使用宽度为5的滤波核进行中值滤波
dst3 = cv2.medianBlur(img, 9)                       # 使用宽度为9的滤波核进行中值滤波
cv2.imshow("img", img)
cv2.imshow("3", dst1)
cv2.imshow("5", dst2)
cv2.imshow("9", dst3)
cv2.waitKey()
cv2.destroyAllWindows()


#           ——————————————————————————高斯滤波器(高斯模糊、高斯平滑):滤波核中像素与卷积核进行卷积运算,将计算结果赋值给核心像素,越靠近核心的像素权重越大,越原理核心的像素权重越小即离谁更近跟谁更像
#   卷积核:保存的值就是核所覆盖区域的权重值,所有权重值相加为1
#   dst = cv2.GaussianBlur(src,ksize,sigmaX,sogmaY)     参数依次是:滤波核的大小,卷积核水平方向的标准差,卷积核垂直方向的标准差,(这俩参数为0表示:由计算机根据滤波核大小自动计算何时的权重比例),边界样式(可选)
img = cv2.imread("amygdalus triloba.jpg")
dst1 = cv2.GaussianBlur(img, (5, 5), 0, 0)          # 使用大小为5*5的滤波核进行高斯滤波
dst2 = cv2.GaussianBlur(img, (9, 9), 0, 0)          # 使用大小为9*9的滤波核进行高斯滤波
dst3 = cv2.GaussianBlur(img, (15, 15), 0, 0)        # 使用大小为15*15的滤波核进行高斯滤波
cv2.imshow("img", img)
cv2.imshow("5", dst1)
cv2.imshow("9", dst2)
cv2.imshow("15", dst3)
cv2.waitKey()
cv2.destroyAllWindows()



#           ——————————————————————————双边滤波器:首先判断滤波核处于平坦区域或边缘区域:若为平坦区域则使用类似高斯滤波算法进行滤波,若为边缘区域则加大边缘像素的权重,尽可能让这些像素值保持不变
#   dst = cv2.billateralFilter(src, d,sigmaColor,sigmaSpace,borderType)
#   参数依次是:以当前像素为中心的整个滤波区域的直径(若d<0,则自动根据sigmaSpace参数计算得到,该值与保留的边缘信息数量成正比,,该方法与运算效率成反比。
#   参与计算的颜色范围,该值为像素颜色值与周围像素颜色值的最大差值,只有颜色值之差小于此值时,周围元素才进行滤波运算,值为255表示所有值参与运算。
#   坐标空间的a(阿尔法)值,该值越大参与计算的像素数量越多
#   边界样式
img = cv2.imread("amygdalus triloba.jpg")
dst1 = cv2.GaussianBlur(img, (15, 15), 0, 0)        # 使用大小为15*15的滤波核进行高斯滤波
dst2 = cv2.bilateralFilter(img, 15, 120, 100)       # 双边滤波,选取范围直径为15,颜色差为120
cv2.imshow("img", img)
cv2.imshow("Gauss", dst1)                           # 显示高斯滤波效果
cv2.imshow("bilateral", dst2)                       # 显示双边滤波效果
cv2.waitKey()
cv2.destroyAllWindows()

amygdalus triloba.jpg
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值