opencv的幾種濾波運算元
1、 模糊函式blur濾波
//! a synonym for normalized box filter
CV_EXPORTS_W void blur( InputArray src, OutputArray dst,
Size ksize, Point anchor=Point(-1,-1),
int borderType=BORDER_DEFAULT );
引數說明:
InputArray 表示輸入影象Mat型別src,
OutputArray表示輸出影象Mat型別dst,
Size表示卷積核大小,此引數決定模糊程度,Size(x,y)其中x,y取值越大,表示模糊程度越深,而且x,y表示為奇數。
Point 表示錨定的位置,也就是卷積核替換重疊畫素中的哪個位置,此引數一般使用Point(-1,-1)表示使用卷積核的中心位置。
Type表示對邊緣的處理方法,一般預設為4,
Mat src,dst;
src = imread("C:\\Users\\934554314\\Desktop\\src.jpg", 1);
cvtColor(src, src, CV_BGR2GRAY);
namedWindow("src", WINDOW_NORMAL);
imshow("src", src);
blur(src, dst, Size(5, 5), Point(-1, -1), 4);
namedWindow("dst", WINDOW_NORMAL);
imshow("dst", dst);
waitKey(0);
return;
測試圖片如下:
src = imread("C:\\Users\\934554314\\Desktop\\src.jpg", 1);
blur(src, dst, Size(30, 1), Point(-1, -1), 4);//X方向模糊,
src = imread("C:\\Users\\934554314\\Desktop\\src.jpg", 1);
blur(src, dst, Size(1, 30), Point(-1, -1), 4);//Y方向模糊,
2、高斯模糊函式GaussianBlur
CV_EXPORTS_W void GaussianBlur( InputArray src,
OutputArray dst, Size ksize,
double sigmaX, double sigmaY=0,
int borderType=BORDER_DEFAULT );
引數說明:SigmaX表示高斯方程中的X方向標準方差,
SigmaY表示高斯方程中的Y方向標準方差,
Type一般為預設值4;
Size表示高斯卷積核,必須是正奇數,SigmaX在當Size大小不為0 的時候從size大小計算,SigmaY在SigmaX不為零的時候從X計算、SigmaX為零的時候從Size大小中計算。
src = imread("C:\\Users\\934554314\\Desktop\\src.jpg", 1);
GaussianBlur(src, dst, Size(5, 5), 0, 0, 4);
3、中值濾波
src = imread("C:\\Users\\934554314\\Desktop\\src.jpg", 1);
medianblur(src,dst,5);
4、雙邊模糊函式bilateralFilter
//! smooths the image using bilateral filter
CV_EXPORTS_W void bilateralFilter( InputArray src, OutputArray dst, int d,
double sigmaColor, double sigmaSpace,
int borderType=BORDER_DEFAULT );
d表示雙邊濾波時候中心到周邊畫素的距離,
sigmacolor表示高斯核中顏色值標準方差
sigmaspace表示高斯核中空間的標準方差
Type一般為預設值4;
src = imread("C:\\Users\\934554314\\Desktop\\src.jpg", 1);
bilaterlFilter(src,dst,15,120,10,4);
5、濾波函式filter2D
CV_EXPORTS_W void filter2D( InputArray src, OutputArray dst, int ddepth,
InputArray kernel, Point anchor=Point(-1,-1),
double delta=0, int borderType=BORDER_DEFAULT );
d表示輸出影象的深度,-1表示跟輸入影象深度相同
kernel表示自定義的Mat物件,卷積核或者運算元,
Point表示錨定的位置。預設為Point(-1,-1);
delta表示卷積處理之後的每個畫素是否加上常量delta,一般預設為0;
Type一般為預設值4;
//影象的模糊
int ksize = 15;
Mat kernel = Mat::ones(ksize, ksize, CV_32F) / (float)(ksize*ksize);
filter2D(src, dst, -1, kernel, Point(-1, -1), 0.0, 4);
//影象的邊緣提取
Mat kernel1 = (Mat_<char>(3, 3) << -1, -1, -1, -1, 8,-1, -1, -1, -1);
filter2D(src, dst, -1, kernel1, Point(-1, -1), 0.0, 4);
//影象的銳化
Mat kernel1 = (Mat_<char>(3, 3) << -1, -1, -1, -1, 9,-1, -1, -1, -1);
filter2D(src, dst, -1, kernel1, Point(-1, -1), 0.0, 4);
//robot運算元
Mat kernel1 = (Mat_<char>(2, 2) << -1,0,0,1);
filter2D(src, dst, -1, kernel1, Point(-1, -1), 0.0, 4);
//sobel運算元
Mat kernel1 = (Mat_<char>(3,3) << 1,2,1,0,0,0,-1,-2,-1);
filter2D(src, dst, -1, kernel1, Point(-1, -1), 0.0, 4);