OpenCV(7)-OpenCV中的滤波器

OpenCV中的滤波器

图像滤波

  • 滤波的作用:一幅图像通过滤波器得到另一幅图像;其中滤波器又称为卷积核,滤波的过程被称为卷积

卷积的几个基本概念:

  • 卷积核的大小:
    • 卷积核一般为奇数,如3 * 3,5 * 5, 7 * 7等
    • 一方面是增加padding的原因
    • 另一方面是保证锚点在中间,防止位置发生偏移的原因
    • 影响:在深度学习中,卷积核越大,看到的信息(感受野)越多,提取的特征越好,同时计算量也就越大
  • 锚点:
    • 正中心
  • 边界扩充:
    • 当卷积核大于1且不进行边界扩充,输出尺寸将响应缩小
    • 当卷积核以标准方式进行边界扩充,则输出数据的空间尺寸将与输入相等
    • 计算公式:N = (W - F + 2P) / S + 1
      • N输出图像大小
      • W源图大小
      • F卷积核大小
      • P扩充尺寸
      • S步长大小
  • 步长

实战图像卷积

低通滤波与高通滤波

  • 低通滤波可以去除噪音或平滑图像
  • 高通滤波可以帮助查找图像的边缘

图像卷积

  • filter2D(src,ddepth,kernel,anchor,delta,borderType)
    • src:对哪幅图像进行卷积
    • ddepth:图像的位深
    • kernel:卷积核
    • anchor:锚点,默认为(-1,-1)
    • delta:每个元素加一个delta值
    • borderType:边界类型
#平滑处理
import cv2
import numpy as np

img = cv2.imread('1.png')
kernel = np.ones((5,5),np.float32) / 25
dst = cv2.filter2D(img, -1, kernel)

cv2.imshow('dst',dst)
cv2.imshow('img',img)

cv2.waitKey(0)

方盒滤波与均值滤波

方盒滤波

在这里插入图片描述

  • 参数a的作用:
    • normalize = true, a = 1/W *H (进行均值化) 方盒滤波==平均滤波
    • normalize = false, a = 1 (不进行均值化)
  • boxFilter(src,ddepth,ksize,anchor,normalize,borderType)

均值滤波

  • blur(src,ksize,anchor,borderType)

  • 一般只设src,ksize即可,使用anchor,borderType的默认值

dst = cv2.blur(img,(5,5))

高斯滤波:

  • 图像类似正态分布,中间高,两边低

在这里插入图片描述

  • GaussianBlur(img,kernel,sigmaX,sigmaY…)
    • sigmaX:钟型滤波的延展宽度,也就是最大范围到中心点有多大误差,sigma越大,图像越模糊
dst = cv2.GaussianBlur(img,(5,5),sigmaX = 1)
  • sigma越大,图像越模糊,使用高斯滤波主要用于解决高斯噪点

中值滤波

  • 优点:对胡椒噪音效果明显
    在这里插入图片描述

  • medianBlur(img,ksize)

dst = cv2.medianBlur(img,(5,5))

双边滤波

  • 优点:可以保留边缘,同时可以对边缘内的区域进行平滑处理
  • 主要作用:进行美颜
  • bilateralFilter(img,d,sigmaColor,sigmaSpace,…)
dst = cv2.bilateralFilter(img,7,20,50)

高通滤波–Scharr算子

  • 与Sobel类似,只不过使用的kernel值不同
  • Scharr只能求x方向或y方向的边缘
  • Scharr(src,ddepth,dx,dy,scale = 1, delta = 0, borderType = BORDER_DEFAULT)
d1 = cv2.Scharr(img,cv2.CV_64F,0,1)

高通滤波–拉普拉斯算子

  • 优点:可以同时求两个方向的边缘
  • 缺点:对噪音敏感,一般需要先进行去噪再调用拉普拉斯
  • Laplacian(img,ddepth,ksize = 1,scale = 1, borderType = BORDER_DEFAULT)
dst = cv2.Laplacian(img,cv2.CV_64F,ksize = 5)

边缘检测Canny

  • 边缘检测终极大法

  • 优点:边缘处理细致、操作简单

  • 操作实现:

    • 使用5*5高斯滤波消除噪声
    • 计算图像梯度的方向(0/45/90/135)
    • 取局部极大值
    • 阈值计算:如果大于最大值,一定是边缘;如果低于最小值,一定不是边缘;如果在两者之间,需要判断与之前是否连贯(连贯是边缘)
  • Canny(img,minVal,maxVal,…)

dst = cv2.Canny(img,100,200)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值