OpenCv之滤波器

目录

一、卷积

 二、方盒滤波与均值滤波

三、高斯滤波

四、中值滤波

五、双边滤波


一、卷积

图像卷积就是卷积核在图像上按行华东遍历像素时不断的相乘求和的过程

 相关知识点:

  • 步长:就是卷积核在图像上移动的步幅.(为充分扫描图片,步长一般为1)
  • padding:指在图片周围填充的0的圈数
  • 卷积核大小:卷积核一般为奇数,比如3*3、5*5、7*7

OpenCv中卷积函数:

filter2D(src, ddepth, kernell dstl anchorl deltal borderType]]]])

  • ddepth是卷积之后图片的位深,即卷积之后图片的数据类型,一般设为-1,表示和原图类型一致。kernel是卷积核大小,用元组或者ndarray表示要求数据类型必须是float型
  • anchor锚点即卷积核的中心点是可选参数默认是(-1,-1)
  • delta 可选参数表示卷积之后额外加的一个值相当于线性方程中的偏差,默认是0
  • borderType边界类型一般不设

卷积案例代码如下:

import cv2
import numpy as np

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

# 相当于每个点都被平均了一下,所以图像变模糊了
# kernel = np.ones((5,5),np.float32) / 25

# 尝试其它卷积核,突出轮廓
kernel = np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]])

# 浮雕效果
kernel = np.array([[-2,1,0],[-1,1,1],[0,1,2]])

# 锐化
kernel = np.array([[0,-1,0],[-1,5,-1],[0,-1,0]])

# ddepth = -1表示图片的数据类型不变
dst = cv2.filter2D(img,-1,kernel)

# 图片展示
cv2.imshow('img',np.hstack((img,dst)))
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下:

 二、方盒滤波与均值滤波

方盒滤波案例代码如下:

import cv2
import numpy as np

# 读取图片
img = cv2.imread('6.jpg')

# 无需手动创建卷积核,只需要告诉方盒滤波,卷积核的大小是多少
dst = cv2.boxFilter(img,-1,(5,5),normalize=True)

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

cv2.waitKey(0)
cv2.destroyAllWindows()

均值滤波案例代码如下:

import cv2
import numpy as np

# 读取图片
img = cv2.imread('6.jpg')
# 均值滤波无位深这个参数
dst = cv2.blur(img,(5,5))


cv2.waitKey(0)
cv2.destroyAllWindows()

三、高斯滤波

首先明白什么是高斯函数:

高斯函数是在符合高斯分布(也叫正态分布)的数据的概率密度函数 

 高斯函数的一般形式:

 参照函数:

案例代码如下:

import cv2
import numpy as np


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

# 高斯滤波
new_img = cv2.GaussianBlur(img,(5,5),sigmaX=10)

cv2.imshow('new_img',np.hstack((img,new_img)))
cv2.waitKey(0)
cv2.destroyAllWindows()

四、中值滤波

中值滤波的原理:假设有一个数组[1,5,5,6,7,8,9],取中间值(即中位数)作为卷积后的结果即可.中值滤波对胡椒噪音(也叫椒盐噪音)效果明显

案例代码如下:

import cv2
import numpy as np

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

# 注意这里的ksize就是一个整数
# 中值滤波
dst = cv2.medianBlur(img,5)

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

cv2.waitKey(0)
cv2.destroyAllWindows()

五、双边滤波

双边滤波原理:双边滤波对于图像的边缘信息能过更好的保存。其原理为一个与空间举例相关的高斯函数与一个灰度距离相关的高斯函数相乘。

 双边滤波可以保留边缘,同时可以对边缘内的区域进行平滑处理

参照函数:

 

案例代码如下:

 

import cv2
import numpy as np

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

# sigmaColor为灰度距离
# sigmaSpace为空间距离
dst = cv2.bilateralFilter(img,7,sigmaColor=20,sigmaSpace=50)

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

cv2.waitKey(0)
cv2.destroyAllWindows()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

几两春秋梦_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值