1.均值滤波。简单来说就是将一个点周围的点的像素和平均值赋给它作为这个点的新值,图像就变得模糊了!
2.高斯滤波。考虑了每个点的权重问题,不会有太夸张的变化。
#include <opencv2\core\core.hpp> #include <opencv2\highgui\highgui.hpp> #include <opencv2\imgproc\imgproc.hpp> #include <opencv2\objdetect\objdetect.hpp> #include <opencv2\imgproc\types_c.h> #include <opencv2\objdetect\objdetect_c.h> #include<opencv2/opencv.hpp> #include<iostream> #include<cmath> #include<cstdio> using namespace std; using namespace cv; int main() { Mat src,dst; src=imread("pig.jpeg"); if(src.empty()) { cout<<"!!???"<<endl; return -1; } namedWindow("pig!",1); imshow("pig!",src); blur(src,dst,Size(11,11),Point(-1,-1));//均值模糊 namedWindow("out",1); imshow("out",dst); Mat dst2; GaussianBlur(src,dst2,Size(11,11),11,11);//高斯模糊 namedWindow("out2",1); imshow("out2",dst2); waitKey(0); return 0; }
3.中值滤波
4.双边滤波
#include <opencv2\core\core.hpp> #include <opencv2\highgui\highgui.hpp> #include <opencv2\imgproc\imgproc.hpp> #include <opencv2\objdetect\objdetect.hpp> #include <opencv2\imgproc\types_c.h> #include <opencv2\objdetect\objdetect_c.h> #include<opencv2/opencv.hpp> #include<iostream> #include<cmath> #include<cstdio> using namespace std; using namespace cv; int main() { Mat src,dst; src=imread("pig.jpeg"); if(src.empty()) { cout<<"!!???"<<endl; return -1; } namedWindow("pig!",1); imshow("pig!",src); medianBlur(src,dst,3);//中值滤波 namedWindow("out",1); imshow("out",dst); Mat dst2,dst3; bilateralFilter(src,dst2,15,150,3);//双边模糊 namedWindow("out2",1); imshow("out2",dst2); Mat ken=(Mat_<int>(3,3)<<0,-1,0,-1,5,-1,0,-1,0); filter2D(dst,dst3,-1,ken,Point(-1,-1),0);//再来提高对比度! //GaussianBlur(src,dst3,Size(15,15),3,3); namedWindow("out3",1); imshow("out3",dst3); waitKey(0); return 0; }