OpenCV medianBlur()函数的用法(附带实例)
中值滤波用像素点领域灰度值的中值来代替该像素点的灰度值,也就是说用一片区域的中间值来代替所有值,这可以除去最大值和最小值。中值滤波对除去斑点噪声和椒盐噪声很有用,缺点是中值滤波花费的时间在均值滤波的 5 倍以上。
中值平滑也有核,但并不进行卷积计算,而是对核中所有像素值排序得到中间值,用该中间值来代替锚点值。中值滤波在数字图像处理中属于空域平滑滤波的内容。
在 OpenCV 中,利用 medianBlur() 来进行中值平滑,其声明如下:
【实例】实现中值滤波。
1) 打开 Qt Creator,新建一个控制台工程,工程名是 test。
2) 在工程中打开 main.cpp,输入如下代码:
3) 保存工程并运行,结果如下图所示:
中值平滑也有核,但并不进行卷积计算,而是对核中所有像素值排序得到中间值,用该中间值来代替锚点值。中值滤波在数字图像处理中属于空域平滑滤波的内容。
在 OpenCV 中,利用 medianBlur() 来进行中值平滑,其声明如下:
void cv::medianBlur ( InputArray src, OutputArray dst, int ksize );各个参数的含义如下:
- src 表示输入图像,图像为 1、3、4 通道的图像,当模板尺寸为 3 或 5 时,图像深度只能为 CV_8U、CV_16U、CV_32F 中的一个。对于较大孔径尺寸的图片,图像深度只能是 CV_8U;
- dst 表示输出图像,尺寸和类型与输入图像一致,可以使用 Mat::Clone 以原图像为模板来初始化输出图像;
- ksize 表示滤波模板的尺寸大小,必须是大于 1 的奇数,如 3、5、7。
【实例】实现中值滤波。
1) 打开 Qt Creator,新建一个控制台工程,工程名是 test。
2) 在工程中打开 main.cpp,输入如下代码:
#include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" using namespace cv; int main() { Mat image = imread("lady.png"); // 载入原图 namedWindow("src"); // 创建窗口 namedWindow("median filtering"); // 命名窗口 // 显示原图 imshow("src", image); // 进行中值滤波操作 Mat out; medianBlur(image, out, 7); // 输入,输出,孔径为 7 // 显示效果图 imshow("median filtering", out); // 显示中值滤波效果图 waitKey(0); }在上述代码中,我们对图片进行了孔径为 7 的中值滤波。
3) 保存工程并运行,结果如下图所示:
