使用-快速上手
原理
线性滤波输出像素值,f为输入图像,h为核
g
(
i
,
j
)
=
∑
k
,
l
f
(
i
+
k
,
j
+
l
)
∗
h
(
k
,
l
)
g(i,j)=\sum\limits_{k,l} f(i+k,j+l)*h(k,l)
g(i,j)=k,l∑f(i+k,j+l)∗h(k,l)
方框滤波
void boxFilter(InputArray src, OutputArray dst, int ddepth, Size ksize, Point anchor=Point(-1,-1), bool normalize=true, int borderType=BORDER_DEFAULT);
参数
src输入图像dst目标图像ddepth输出图像的深度,-1代表使用原图深度ksize内核的大小,用Size(w,h)表示,w为像素宽度,h为像素高度anchor锚点,如果该点坐标为负值表示取核的中心点为锚点normalize内核是否被其区域归一化borderType用于推断图像外部像素的某种边界模式
该函数所用的核为
K
=
a
[
1
⋯
1
⋮
⋱
⋮
1
⋯
1
]
K=a \left [ \begin{matrix} 1 & \cdots & 1 \\ \vdots & \ddots & \vdots \\ 1 & \cdots & 1 \end{matrix} \right ]
K=a⎣⎢⎡1⋮1⋯⋱⋯1⋮1⎦⎥⎤
当normalize=true时,
a
=
1
w
∗
h
a=\frac{1}{w*h}
a=w∗h1
当normalize=false时,
a
=
1
a=1
a=1
下面说到的均值滤波其实就是normalize=true时的方框滤波
均值滤波
实际上这个函数基本上就是直接调用了boxFilter()
void blur(InputArray src, OutputArray dst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT);
参数基本同上
高斯滤波
使用示例
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char* argv[])
{
Mat src;
src = imread("D:/Doucuments/temp/opencv_cpp/aete.jpg");
Mat bdst, gbdst;
blur(src, bdst, Size(20, 20));
GaussianBlur(src, gbdst, Size(11, 11), 10, 10);
namedWindow("src");
namedWindow("blur");
namedWindow("gblur");
imshow("src", src);
imshow("blur", bdst);
imshow("gblur", gbdst);
waitKey(0);
return 0;
}
OpenCV图像处理:从方框滤波到高斯滤波的实践

这篇博客介绍了OpenCV中实现线性滤波的原理,特别是方框滤波和高斯滤波。方框滤波通过设置一个全1的核并可选地进行归一化来平滑图像,常用于均值滤波。高斯滤波则是使用高斯核对图像进行滤波,可用于消除噪声。文中提供了C++代码示例,演示了如何使用`blur()`和`GaussianBlur()`函数进行滤波操作,展示了滤波前后的图像效果。
2290

被折叠的 条评论
为什么被折叠?



