Smooth/Blur 是图像处理中最简单和常用的操作之一
使用该操作的原因之一就为了给图像预处理时候减低噪声
使用Smooth/Blur操作其背后是数学的卷积计算
通常这些卷积算子计算都是线性操作,所以又叫线性滤波
void cv::blur ( InputArray src,
OutputArray dst,
Size ksize,
Point anchor = Point(-1,-1),
int borderType = BORDER_DEFAULT
)
void cv::GaussianBlur ( InputArray src,
OutputArray dst,
Size ksize,
double sigmaX,
double sigmaY = 0,
int borderType = BORDER_DEFAULT
)
实例
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
Mat src, dst,gblur;
src = imread("F:/1.jpg");
if (src.empty())
{
cout << "cannot load image" << endl;
return -1;
}
namedWindow("input", WINDOW_AUTOSIZE);
imshow("input", src);
blur(src, dst, Size(15, 15), Point(-1, -1));
imshow("blur output", dst);
GaussianBlur(src, gblur, Size(15, 15), 11, 11);
imshow("gaussian blur output", gblur);
waitKey(0);
return 0;
}
中值滤波
双边滤波
void cv::medianBlur ( InputArray src,
OutputArray dst,
int ksize
)
void cv::bilateralFilter ( InputArray src,
OutputArray dst,
int d,
double sigmaColor,
double sigmaSpace,
int borderType = BORDER_DEFAULT
)
int main(int argc, char** argv)
{
Mat src, dst;
src = imread("F:/1.jpg");
if (src.empty())
{
cout << "cannot load image" << endl;
return -1;
}
namedWindow("input", WINDOW_AUTOSIZE);
imshow("input", src);
/*medianBlur(src, dst, 3);*/
bilateralFilter(src, dst, 15, 150, 3);
namedWindow("bilateral filter result", WINDOW_AUTOSIZE);
imshow("bilateral filter result",dst);
Mat result;
Mat kernel = (Mat_<int>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
filter2D(dst, result, -1, kernel, Point(-1, -1), 0);
imshow("result", result);
waitKey(0);
return 0;
}