opencv 滤波器,python实现滤波器
OpenCV中常用的几种滤波器有:均值滤波器、中值滤波器、高斯滤波器和双边滤波器。本文将通过实例详细讲解这些滤镜的使用方法,有需要的可以参考。
00-1010 1.滤镜1.1什么是滤镜1.2关于滤镜内核1.3选材2。均值滤波器cv2.blur()2.1语法介绍2.2代码示例3。中值模糊()代码示例4。高斯滤波器cv2。高斯布鲁()5。双边过滤器cv2 .双边过滤器()
目录
1. 滤波器
滤镜是平滑图像的常用工具。
平滑是一系列的操作,比如在尽可能保留原始图像信息的同时,对像素值进行微调,使相邻像素值之间的值趋于“平滑”,从而去除图像中的噪声,降低细节信息的层次。本博客将向您展示OpenCV中的均值滤波、中值滤波、高斯滤波和双边滤波。
滤波器的算法逻辑是指定一个滤波器核的大小(这个大小代表参与计算的像素数据的范围),把图像中的每个像素作为波的核心,通过这个范围内的数据以一定的计算方式进行计算,并将计算结果的值赋给这个像素。
1.1 什么是滤波器
以大小为nn的滤波器核为例。对于每个像素数据,我们可以得到一个以数组中一个像素为中心的nn矩阵,这个矩阵就是参与计算的数据的范围(边界)。这样的矩阵结构称为滤波器核。
1.2 关于滤波核
使用图像《龙门石窟》(longmen.jpg)形状:(350,600,3)
1.3 素材选择
2.均值滤波器 cv2.blur()
平均滤波器,也称为低通滤波器
顾名思义,平均滤波器对滤波器核中的数据进行平均,然后将这个值赋给矩阵的核心位置。
均值滤波器可以通过cv2.blur()方法实现。
2.blur()的语法:
dst=blur(src,ksize,dst=None,anchor=None,borderType=None)
在…之中
即scr图像的滤波核大小ksize。使用一个元组,比如(a,b),其中a表示高度,b表示宽度。在锚固波核的borderType边界类型的底部,以33、55和1010滤波核为例,展示图像经均值滤波处理后的效果。
2.1 语法简介
2.2.1以3 3滤芯为例。
导入cv2
img=cv2 . im read( lumen . jpg )
dst1=cv2.blur(img,(3,3))
cv2.imshow(3*3 ,dst1)
cv2.waitKey()
cv2.destroyAllWindows()
过滤效果如下:
2.2.2以5 5滤芯为例。
导入cv2
img=cv2 . im read( lumen . jpg )
dst2=cv2.blur(img,(5,5))
cv2.imshow(5*5 ,dst2)
cv2.waitKey()
cv2.destroyAllWindows()
过滤效果
如下:
2.2.3 10×10滤波核为例
import cv2
可以看出,滤波核大小越大,图像越趋于模糊。
3. 中值滤波器 cv2.medianBlur()
中值滤波器,即对滤波核内所有数据排序,将中间值赋值给滤波核核心位置的数字。
medianBlur(src, ksize, dst=None)
其中 ksize必须是奇数,是偶数的话会发生报错。
不同于均值滤波器的方法,cv2.blur(),cv2.blur()的ksize参数是一个元组,而cv2.blur()的ksize参数是一个数值。
代码示例
import cv2
滤波后效果如下:
4. 高斯滤波器 cv2.GaussianBlur()
高斯滤波器也被称为高斯模糊 或 高斯平滑 。
高斯滤波器可以在降低图片噪声、细节层次的同时保留更多的图像信息,使经过处理的图像呈现出磨砂玻璃的滤镜效果。
使用均值滤波时,每个像素都是均等权重的。使用高斯滤波器求的是不同权重下的均值,越靠近核心的像素的权重越大,约靠近边缘的像素的权重则越小。
与滤波核对应的由每个数据权重组成的矩阵结构,是一个卷积核。卷积核中所有权重值的和为1。卷积核中的数值会随着核的大小而变化。
OpenCV使用cv2.GaussianBlur()方法实现高斯滤波器。其语法如下:
GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)
其中
src 为目标图像
ksize 是滤波核大小,宽高必须是奇数 。格式为是元组形式。
修改sigmaX 和 sigmaY都会改变卷积核中的权重值。这里涉及卷积方面的知识。
borderType 是边界类型。
以9×9的滤波核为例
import cv2
滤波后效果如下:
5. 双边滤波器 cv2.bilateralFilter()
前三种滤波方式都会使图像变得平滑的同时,边缘区域变得模糊不清。
双边滤波是可以在滤波过程中起到保护图像边界信息作用的滤波操作方法。
其逻辑为:
如果图像在边缘区域,则加大边缘像素的权重,尽可能地让边缘区域的像素值保持不变。如果不在边缘区域(在平坦区域),则使用类似高斯滤波器的算法进行。
双边滤波器的语法为:
bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None)
scr 即目标图像
d过滤期间使用的每个像素邻域的直径。如果为非正,则根据sigmaSpace计算。即如果为15,则表示15×15的滤波核。
sigmaColor参与计算的颜色的范围,只有像素小于这个值时,以其为核心的滤波核才参与滤波计算。否则不参与。当sigmaColor值为255时,表示所有像素值为核心的滤波核都会参与。
sigmaSpace坐标空间的σ sigmaσ值,σ sigmaσ越大,参与计算的像素数量就越多。
borderType边界的样式。
还以图片"longmen.jpg"为例,
选择20×20的滤波核,
参与计算的像素值范围为:小于125的像素值;
坐标空间的σ sigmaσ值为,200
import cv2
双边滤波效果如下:
可以看出,相比以上滤波效果,双边滤波保留了较清晰的图像边缘信息。
到此这篇关于Python OpenCV之常用滤波器使用详解的文章就介绍到这了,更多相关Python OpenCV滤波器内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。