opencv3学习之五种滤波器的简单应用

其实以下几种滤波器:方框滤波器、均值滤波器、高斯滤波器、中值滤波器、双边滤波器,呈现出来的效果,肉眼看起来并没有什么区别,感觉都是将图像进行模糊处理。但实际上这几种滤波器适用的情况各不相同,很多时候我们可以扬长避短,选择最合适最优化的滤波器。比如:

opencv3学习之五种滤波器的简单应用






















//17.boxfilter

/*#include <opencv2/opencv.hpp>

#include <opencv2/imgproc/imgproc.hpp>

#include <opencv2/highgui/highgui.hpp>

#include <opencv2/core/core.hpp>

using namespace cv;

int main(){

    Mat image=imread("/Users/oumoemoe/Downloads/S2017.jpg");

    namedWindow("1");//如果把窗口名字命名为数字就能正常显示,但如果以汉字来命名则只能显示一张图片,为什么呢?

    namedWindow("2");

    

    imshow("1", image);

    

    Mat out;

    boxFilter(image, out, -1, Size(5,5));//-1表示从图像的正中心开始,size(5,5)表示以图像中心为中心所处理的邻域范围

    imshow("2", out);

    waitKey(0);

    return 0;

}*/

//18.blur

/*#include <opencv2/opencv.hpp>

#include <opencv2/core/core.hpp>

#include <opencv2/highgui/highgui.hpp>

#include <opencv2/imgproc/imgproc.hpp>

using namespace cv;

int main(){

    Mat image=imread("/Users/oumoemoe/Downloads/S2017.jpg");

    namedWindow("1");

    namedWindow("2");

    imshow("1", image);

    

    Mat out;

    blur(image, out, Size(3,3));

    imshow("2", out);

    

    waitKey(0);//blur是标准化后的boxfilter,两者的具体区别是什么呢

    return 0;

}*/

//19.GaussianBlur

/*#include <opencv2/opencv.hpp>

#include <opencv2/core/core.hpp>

#include <opencv2/highgui/highgui.hpp>

#include <opencv2/imgproc/imgproc.hpp>

using namespace cv;

int main(){

    Mat image=imread("/Users/oumoemoe/Downloads/S2017.jpg");

    namedWindow("1");

    namedWindow("2");

    imshow("1", image);

    

    Mat out;

    GaussianBlur(image, out, Size(3,3), 0,0);//第四个和第五个参数指的是高斯核函数在XY方向上的偏差

    

    imshow("2", out);

    

    waitKey(0);//blur是标准化后的boxfilter,两者的具体区别是什么呢

    return 0;

}*/

//21.medianblur

/*#include <opencv2/opencv.hpp>

#include <opencv2/highgui/highgui.hpp>

#include <opencv2/imgproc/imgproc.hpp>

#include <opencv2/core/core.hpp>

using namespace cv;

int main(){

    Mat image=imread("/Users/oumoemoe/Downloads/girl.png");

    namedWindow("1");

    

    Mat out;

    out=image.clone();

    medianBlur(image, out, 7);

    imshow("1", out);

    waitKey(0);

    return 0;

}*/

//22.bilateralFilter

#include <opencv2/opencv.hpp>

#include <opencv2/highgui/highgui.hpp>

#include <opencv2/imgproc/imgproc.hpp>

#include <opencv2/core/core.hpp>

using namespacecv;

int main(){

    Mat image=imread("/Users/oumoemoe/Downloads/girl.png");

    namedWindow("1");

    

    Mat out;

    bilateralFilter(image, out,25, 25*2,25/2);

    imshow("1", out);

    waitKey(0);

    return0;

}