1、方框滤波:boxFilter函数的使用
结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/9a4f1ad4149a46598812e6b469367177.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAeWFuZ3lhbmdfeg==,size_20,color_FFFFFF,t_70,g_se,x_16)
C++代码示例
#include<opencv2/opencv.hpp>
#include<string>
using namespace cv;
std::string image_path = "F:/images/renwu1.jpg";
std::string boxFilter_original = "boxFilterOriginal";
std::string boxFilter_result = "boxFilterResult";
static void test()
{
Mat image = imread(image_path);
namedWindow(boxFilter_original, WINDOW_AUTOSIZE);
namedWindow(boxFilter_result, WINDOW_AUTOSIZE);
imshow(boxFilter_original, image);
Mat result;
boxFilter(image, result, -1, Size(5, 5));
imshow(boxFilter_result, result);
waitKey(0);
}
int main()
{
test();
system("pause");
return 0;
}
2、均值滤波:blur函数的使用
结果
![均值滤波](https://img-blog.csdnimg.cn/7735cb94ff0b43898a9442fdab886242.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAeWFuZ3lhbmdfeg==,size_20,color_FFFFFF,t_70,g_se,x_16)
C++代码示例
#include<opencv2/opencv.hpp>
#include<string>
using namespace cv;
std::string image_path = "F:/images/renwu1.jpg";
std::string blur_original = "blurOriginal";
std::string blur_result = "blurResult";
static void test()
{
Mat srcImage = imread(image_path);
imshow(blur_original, srcImage);
Mat dstImage;
blur(srcImage, dstImage, Size(7, 7));
imshow(blur_result, dstImage);
waitKey(0);
}
int main()
{
test();
system("pause");
return 0;
}
3、高斯滤波:GaussianBlur函数的使用
结果
![高斯滤波](https://img-blog.csdnimg.cn/fc3c481406cd4c1d976e37831e215beb.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAeWFuZ3lhbmdfeg==,size_20,color_FFFFFF,t_70,g_se,x_16)
C++代码示例
#include<opencv2/opencv.hpp>
#include<string>
using namespace cv;
std::string image_path = "F:/images/renwu1.jpg";
std::string gaussian_blur_original = "GaussianBlurOriginal";
std::string gaussian_blur_result = "GaussianBlurResult";
static void test()
{
Mat image = imread(image_path);
namedWindow(gaussian_blur_original);
namedWindow(gaussian_blur_result);
imshow(gaussian_blur_original, image);
Mat result;
GaussianBlur(image, result, Size(5, 5), 0, 0);
imshow(gaussian_blur_result, result);
waitKey(0);
}
int main()
{
test();
system("pause");
return 0;
}
4、综合示例:图像线性滤波
结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/f5732d510118450b8e75ade33d258949.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAeWFuZ3lhbmdfeg==,size_20,color_FFFFFF,t_70,g_se,x_16)
C++代码示例
#include<opencv2/opencv.hpp>
#include<string>
using namespace cv;
using namespace std;
std::string image_path = "F:/images/renwu1.jpg";
std::string image_original = "Original";
std::string boxFilter_result = "boxFilterResult";
std::string blur_result = "blurResult";
std::string gaussian_blur_result = "GaussianBlurResult";
Mat g_srcImage, g_dstImage1, g_dstImage2, g_dstImage3;
int g_nBoxFilterValue = 3;
int g_nMeanBlurValue = 3;
int g_nGaussianBlurValue = 3;
static void FunBoxFilter(int, void *);
static void FunMeanBlur(int, void *);
static void FunGaussianBlur(int, void *);
static void test()
{
system("color 5F");
g_srcImage = imread(image_path, 1);
if (!g_srcImage.data) { cout << "not load image!! \n"; return; }
g_dstImage1 = g_srcImage.clone();
g_dstImage2 = g_srcImage.clone();
g_dstImage3 = g_srcImage.clone();
namedWindow(image_original, 1);
imshow(image_original, g_srcImage);
namedWindow(boxFilter_result, 1);
createTrackbar("内核值:", boxFilter_result, &g_nBoxFilterValue, 40, FunBoxFilter);
FunBoxFilter(g_nBoxFilterValue, 0);
namedWindow(blur_result, 1);
createTrackbar("内核值:", blur_result, &g_nMeanBlurValue, 40, FunMeanBlur);
FunMeanBlur(g_nMeanBlurValue, 0);
namedWindow(gaussian_blur_result, 1);
createTrackbar("内核值:", gaussian_blur_result, &g_nGaussianBlurValue, 40, FunGaussianBlur);
FunGaussianBlur(g_nGaussianBlurValue, 0);
cout << endl << "\t运行成功,请调整滚动条观察图像效果~\n\n"
<< "\t按下“q”键时,程序退出。\n";
while (char(waitKey(1)) != 'q') {}
return;
}
int main()
{
test();
system("pause");
return 0;
}
static void FunBoxFilter(int, void *)
{
boxFilter(g_srcImage, g_dstImage1, -1, Size(g_nBoxFilterValue + 1, g_nBoxFilterValue + 1));
imshow(boxFilter_result, g_dstImage1);
}
static void FunMeanBlur(int, void *)
{
blur(g_srcImage, g_dstImage2, Size(g_nMeanBlurValue + 1, g_nMeanBlurValue + 1), Point(-1, -1));
imshow(blur_result, g_dstImage2);
}
static void FunGaussianBlur(int, void *)
{
GaussianBlur(g_srcImage, g_dstImage3, Size(g_nGaussianBlurValue * 2 + 1, g_nGaussianBlurValue * 2 + 1), 0, 0);
imshow(gaussian_blur_result, g_dstImage3);
}
5、中值滤波:medianBlur函数的使用
结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/8f9965c8e65e401a8434c573bbb6a6b4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAeWFuZ3lhbmdfeg==,size_20,color_FFFFFF,t_70,g_se,x_16)
C++代码示例
#include<opencv2/opencv.hpp>
#include<string>
using namespace cv;
std::string image_path = "F:/images/renwu1.jpg";
std::string median_blur_original = "medianBlurOriginal";
std::string median_blur_result = "medianBlurResult";
static void test()
{
Mat image = imread(image_path);
namedWindow(median_blur_original,WINDOW_AUTOSIZE);
namedWindow(median_blur_result,WINDOW_AUTOSIZE);
imshow(median_blur_original, image);
Mat result;
medianBlur(image, result, 7);
imshow(median_blur_result, result);
waitKey(0);
}
int main()
{
test();
system("pause");
return 0;
}
6、双边滤波:bilateralFilter函数的使用
结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/d86069a51c87433dbd507f2e4cdb1e10.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAeWFuZ3lhbmdfeg==,size_20,color_FFFFFF,t_70,g_se,x_16)
C++代码示例
#include<opencv2/opencv.hpp>
#include<string>
using namespace cv;
std::string image_path = "F:/images/renwu1.jpg";
std::string bilateralFilter_original = "bilateralFilterOriginal";
std::string bilateralFilter_result = "bilateralFilterResult";
static void test()
{
Mat srcImage = imread(image_path);
namedWindow(bilateralFilter_original);
namedWindow(bilateralFilter_result);
imshow(bilateralFilter_original, srcImage);
Mat result;
bilateralFilter(srcImage, result, 25, 25 * 2, 25 / 2);
imshow(bilateralFilter_result, result);
waitKey(0);
}
int main()
{
test();
system("pause");
return 0;
}
7、综合示例:图像滤波
结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/23b18e88b8db43999f4bb38ef5ffb945.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAeWFuZ3lhbmdfeg==,size_20,color_FFFFFF,t_70,g_se,x_16)
C++代码示例
#include<opencv2/opencv.hpp>
#include<string>
using namespace cv;
using namespace std;
std::string image_path = "F:/images/renwu1.jpg";
std::string image_original = "Original";
std::string median_blur_result = "medianBlurResult";
std::string bilateralFilter_result = "bilateralFilterResult";
Mat g_srcImage, g_dstImage1, g_dstImage2;
int g_nMedianBlurValue = 10;
int g_nBilateralFilterValue = 10;
static void FunMedianBlur(int, void *);
static void FunBilateralFilter(int, void *);
static void test()
{
system("color 4F");
g_srcImage = imread(image_path, 1);
if (!g_srcImage.data) { std::cout << "image not load! \n"; return; }
g_dstImage1 = g_srcImage.clone();
g_dstImage2 = g_srcImage.clone();
namedWindow(image_original, WINDOW_AUTOSIZE);
imshow(image_original, g_srcImage);
namedWindow(median_blur_result, WINDOW_AUTOSIZE);
createTrackbar("参数值:", median_blur_result, &g_nMedianBlurValue, 50, FunMedianBlur);
FunMedianBlur(g_nMedianBlurValue, 0);
namedWindow(bilateralFilter_result, 1);
createTrackbar("参数值:", bilateralFilter_result, &g_nBilateralFilterValue, 50, FunBilateralFilter);
FunBilateralFilter(g_nBilateralFilterValue, 0);
cout << endl << "\t运行成功,请调整滚动条观察图像效果~\n\n"
<< "\t按下“q”键时,程序退出。\n";
while (char(waitKey(1)) != 'q') {}
return;
}
int main()
{
test();
system("pause");
return 0;
}
static void FunMedianBlur(int, void *)
{
medianBlur(g_srcImage, g_dstImage1, g_nMedianBlurValue * 2 + 1);
imshow(median_blur_result, g_dstImage1);
}
static void FunBilateralFilter(int, void *)
{
bilateralFilter(g_srcImage, g_dstImage2, g_nBilateralFilterValue, g_nBilateralFilterValue * 2, g_nBilateralFilterValue / 2);
imshow(bilateralFilter_result, g_dstImage2);
}
8、膨胀:dilate函数的使用
结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/b7b91725fece4df38cb931035c41ccdc.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAeWFuZ3lhbmdfeg==,size_20,color_FFFFFF,t_70,g_se,x_16)
C++代码示例
#include<opencv2/opencv.hpp>
#include<string>
using namespace cv;
std::string image_path = "1.jpg";
std::string dilate_original = "dilateOriginal";
std::string dilate_result = "dilateResult";
static void test()
{
Mat src_image = imread(image_path);
namedWindow(dilate_original, WINDOW_AUTOSIZE);
namedWindow(dilate_result, WINDOW_AUTOSIZE);
imshow(dilate_original, src_image);
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
Mat result;
dilate(src_image, result, element);
imshow(dilate_result, result);
waitKey(0);
}
int main()
{
test();
system("pause");
return 0;
}
9、腐蚀:erode函数的使用
结果
![在这里插入图片描述](https://img-blog.csdnimg.cn/df4d2aa6284748c298171961bc4eb70a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAeWFuZ3lhbmdfeg==,size_20,color_FFFFFF,t_70,g_se,x_16)
C++代码示例
#include<opencv2/opencv.hpp>
#include<string>
using namespace cv;
std::string image_path = "1.jpg";
std::string erode_original = "erodeOriginal";
std::string erode_result = "erodeResult";
static void test()
{
Mat srcImage = imread(image_path);
imshow(erode_original, srcImage);
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
Mat dstImage;
erode(srcImage, dstImage, element);
imshow(erode_result, dstImage);
waitKey(0);
}
int main()
{
test();
system("pause");
return 0;
}