图像处理(2):
非线性滤波(2):非线性滤波相关核心API函数
1.中值滤波: medianBlur函数;2.双边滤波:bilateralFilter函数;
1.中值滤波: medianBlur函数
? ? medianBlur函数使用中值滤波器来平滑(模糊)处理一张图片,从src输入,结果从 dst输出。对于多通道图片,它对每一个通道都单独进行处理,并且支持就地操作(In-placeoperation)。函数原型如下。 ? ? ?C++: void medianBlur(InputArray src,outputArray dst, int ksize)参数详解如下。 ? ? 第一个参数,InputArray类型的src,函数的输入参数,填1、3或者4通道的Mat类型的图像。当 ksize为3或者5的时候,图像深度需为CV_8U、CV_16U、CV_32F其中之一,而对于较大孔径尺寸的图片,它只能是cV_8U。 ? ? 第二个参数:OutputArray类型的 dst,即目标图像,函数的输出参数,需要和源图片有一样的尺寸和类型。我们可以用 Mat::Clone,以源图片为模板,来初始化得到如假包换的目标图。 ? ? 第三个参数:int类型的ksize,孔径的线性尺寸(aperture linear size),注意这个参数必须是大于1的奇数,比如:3、5、7、9…… 调用范例如下。
#include<opencv2\opencv.hpp>
#include<opencv2\highgui\highgui.hpp>
#include <opencv2/core/utils/logger.hpp>
using namespace std;
using namespace cv;
//中值滤波
int main()
{
cv::utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT);//控制台不在输出日志文件
Mat img = imread("E:/pictures/12.png");
imshow("原始图", img);
Mat out;
medianBlur(img, out, 7);//第三个参数表示孔径的线性尺寸,它的值必须是大于1的奇数
imshow("中值滤波", out);
waitKey(0);
}
运行结果:
?2.双边滤波:bilateralFilter函数
? ?此函数的作用是用双边滤波器来模糊处理一张图片,由 src输入图片,结果于dst输出。函数原型如下。
#include<opencv2\opencv.hpp>
#include<opencv2\highgui\highgui.hpp>
#include <opencv2/core/utils/logger.hpp>
using namespace std;
using namespace cv;
//双边滤波
int main()
{
cv::utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT);//控制台不在输出日志文件
Mat img = imread("E:/pictures/12.png");
imshow("原始图", img);
Mat out;
bilateralFilter(img, out, 25, 25 * 2, 25 / 2);
imshow("双边滤波", out);
waitKey(0);
}
运行结果:
?
?
|