OpenCV blur()函数的用法(附带实例)
归一化方框滤波器(Normalized Box Filter)是很简单的滤波器,输出像素值是核窗口内像素值的均值(所有像素加权系数相等)。其核(Kernel,用 K 表示)如下图所示:
方框滤波和均值滤波的核基本上是一致的,主要区别是要不要归一化处理。如果使用归一化处理,方框滤波就是均值滤波,实际上均值滤波是方框滤波归一化后的特殊情况。注意,均值滤波不能很好地保护细节。
OpenCV 提供了 blur() 函数来实现均值滤波操作,该函数声明如下:
【实例】实现均值滤波。
1) 打开 Qt Creator,新建一个控制台工程,工程名是 test。
2) 在工程中打开 main.cpp,输入如下代码:
3) 保存工程并运行,结果如下图所示:

方框滤波和均值滤波的核基本上是一致的,主要区别是要不要归一化处理。如果使用归一化处理,方框滤波就是均值滤波,实际上均值滤波是方框滤波归一化后的特殊情况。注意,均值滤波不能很好地保护细节。
OpenCV 提供了 blur() 函数来实现均值滤波操作,该函数声明如下:
void blur(InputArray src, OutputArray dst, Size ksize, Point anchor=Point(-1, -1), int borderType=BORDER_DEFA);各个参数的含义如下:
- src 表示输入图像,可以是 Mat 类型,图像深度是 CV_8U、CV_16U、CV_16S、CV_32F 以及 CV_64F 其中的一个;
- dst 表示输出图像,深度和类型与输入图像一致;
- ksize 表示滤波模板核的尺寸,一般使用 Size(w,h) 来指定,如 Size(3,3);
- anchor 表示锚点,也就是处理的像素位于核的什么位置,默认值为 (-1, -1),即位于核的中心点,如果没有特殊需要,就不需要更改;
- borderType 用于推断图像外部像素的某种边界模式,默认值为 BORDER_DEFAULT。
【实例】实现均值滤波。
1) 打开 Qt Creator,新建一个控制台工程,工程名是 test。
2) 在工程中打开 main.cpp,输入如下代码:
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <stdio.h>
using namespace std;
using namespace cv;
// 定义全局变量
Mat g_srcImage; // 定义输入图像
Mat g_dstImage; // 定义目标图像
const int g_nTrackbarMaxValue = 9; // 定义轨迹条最大值
int g_nTrackbarValue;
int g_nKernelValue;
void on_kernelTrackbar(int, void*); // 定义回调函数
int main()
{
g_srcImage = imread("cat.png");
// 判断图像是否加载成功
if (g_srcImage.empty())
{
cout << "Fail to open file." << endl;
return -1;
}
namedWindow("src", WINDOW_AUTOSIZE); // 定义窗口显示属性
imshow("src", g_srcImage);
g_nTrackbarValue = 1;
namedWindow("Mean filtering", WINDOW_AUTOSIZE); // 定义滤波后图像显示窗口属性
// 定义轨迹条名称和最大值
char kernelName[20];
sprintf(kernelName, "kernel size: %d", g_nTrackbarMaxValue);
// 创建轨迹条
createTrackbar(kernelName, "Mean filtering", &g_nTrackbarValue, g_nTrackbarMaxValue, on_kernelTrackbar);
on_kernelTrackbar(g_nTrackbarValue, 0);
waitKey(0);
return 0;
}
void on_kernelTrackbar(int, void*)
{
// 根据输入值重新计算 kernel 尺寸
g_nKernelValue = g_nTrackbarValue * 2 + 1;
// 均值滤波函数
blur(g_srcImage, g_dstImage, Size(g_nKernelValue, g_nKernelValue));
imshow("Mean filtering", g_dstImage);// 显示均值滤波结果图
}
3) 保存工程并运行,结果如下图所示:

ICP备案:
公安联网备案: