Python-OpenCV教程-7

OpenCV版本要求在2.3.1以上

本文主要介绍OpenCV中图像的滤波。

对图像进行滤波其实就是用不同的滤波核函数与图像进行卷积。最终,这种运算带来的效果就是一个像素点的值将由它本身和它周围的像素点的像素值共同决定。而不同的滤波函数,就代表了不同的“决定”方法。

1.均值滤波

均值滤波的过程非常简单,它只是简单地用滤波窗口内所有值得均值来代替中心点的值而已。换句话说,也就是通过均值滤波后,每个像素点的值都是原来图片中这个像素点周围的点的均值。程序的运行过称很简单,只要告诉滤波函数滤波窗口的大小即可;


import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('opencv_logo.png')

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

plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred')
plt.xticks([]), plt.yticks([])
plt.show()


2.高斯滤波

与均值滤波类似,高斯滤波也是用周围像素点的加权来估计中心点的值,只不过高斯滤波中,中心点的值不再是周围点的均值,而是加权(这个加权的系数是通过高斯核函数计算出来的)。需要注意的是,高斯滤波的窗口大小必须为奇数。高斯滤波对去除图像中的高斯噪声非常有效。

blur = cv2.GaussianBlur(img,(5,5),0)

3.中值滤波

中值滤波跟之前了两种滤波方式原理上相同,只不过取的是中值而已,这里不再介绍。

4.双边滤波

相比于之前的几种滤波,二值滤波的特点是它在消除噪音的同时,还能保留图形的边界(想象一下,我们用高斯滤波的时候,图像的边界经常因为滤波而变得模糊)。从原理上解释,高斯滤波其实就是用周围像素的加权和去替代需要去噪的像素点,这种滤波方式中,加权的系数只与空间位置有关(待滤波的像素点的周围的的像素值直接影响滤波结果)。而在双边滤波中,加权的系数除了与空间位置有关外,还与像素的值域有关(带滤波的像素点的周围像素的像素值和这个点的像素值的差异也影响滤波是的权重)。由于图形的边界的像素值相比非边界点变化肯定是非常大的,所以双边滤波就给它赋予一个比较低的权重值,因此,双边滤波就可以做到保留边界的效果。

blur = cv2.bilateralFilter(img,9,75,75)
Bilateral Filtering

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值