文章目录
- 1、方框滤波:boxFilter函数的使用
- 2、均值滤波:blur函数的使用
- 3、高斯滤波:GaussianBlur函数的使用
- 4、综合示例:图像线性滤波
- 5、中值滤波:medianBlur函数的使用
- 6、双边滤波:bilateralFilter函数的使用
- 7、综合示例:图像滤波
- 8、膨胀:dilate函数的使用
- 9、腐蚀:erode函数的使用
1、方框滤波:boxFilter函数的使用
结果
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()
{
// 1、读取图像
Mat image = imread(image_path);
//2、创建窗口
namedWindow(boxFilter_original, WINDOW_AUTOSIZE);
namedWindow(boxFilter_result, WINDOW_AUTOSIZE);
//3、显示原图
imshow(boxFilter_original, image);
//4、进行方框滤波操作
Mat result;
boxFilter(image, result, -1, Size(5, 5));
//5、显示效果图
imshow(boxFilter_result, result);
waitKey(0);
}
int main()
{
test();
system("pause");
return 0;
}
2、均值滤波:blur函数的使用
结果
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()
{
//1、载入原始图
Mat srcImage = imread(image_path);
//2、显示原始图
imshow(blur_original, srcImage);
//3、进行均值滤波操作
Mat dstImage;
blur(srcImage, dstImage, Size(7, 7));
//4、显示效果图
imshow(blur_result, dstImage);
waitKey(0);
}
int main()
{
test();
system("pause");
return 0;
}
3、高斯滤波:GaussianBlur函数的使用
结果
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()
{
//1、 载入原图
Mat image = imread(image_path);
//2、创建窗口
namedWindow(gaussian_blur_original);
namedWindow(gaussian_blur_result);
//3、显示原图
imshow(gaussian_blur_original, image);
//4、进行高斯滤波操作
Mat result;
GaussianBlur(image, result, Size(5, 5), 0, 0);
//5、显示效果图
imshow(gaussian_blur_result, result);
waitKey(0);
}
int main()
{
test();
system("pause");
return 0;
}
4、综合示例:图像线性滤波
结果
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;//存储图片的Mat类型
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()
{
//改变console字体颜色
system("color 5F");
//1、 载入原图
g_srcImage = imread(image_path, 1);
if (!g_srcImage.data) { cout << "not load image!! \n"; return; }
//2、克隆原图到三个Mat类型中
g_dstImage1 = g_srcImage.clone();
g_dstImage2 = g_srcImage.clone();
g_dstImage3 = g_srcImage.clone();
//3、显示原图
namedWindow(image_original, 1);
imshow(image_original, g_srcImage);
//=================【<1>方框滤波】==================
//创建窗口
namedWindow(boxFilter_result, 1);
//创建轨迹条
createTrackbar("内核值:", boxFilter_result, &g_nBoxFilterValue, 40, FunBoxFilter);
FunBoxFilter(g_nBoxFilterValue, 0);
//================================================
//=================【<2>均值滤波】==================
//创建窗口
namedWindow(blur_result, 1);
//创建轨迹条
createTrackbar("内核值:", blur_result, &g_nMeanBlurValue, 40, FunMeanBlur);
FunMeanBlur(g_nMeanBlurValue, 0);
//================================================
//=================【<3>高斯滤波】=====================
//创建窗口
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";
//按下“q”键时,程序退出
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函数的使用
结果
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()
{
//1、 载入原图
Mat image = imread(image_path);
//2、创建窗口
namedWindow(median_blur_original,WINDOW_AUTOSIZE);
namedWindow(median_blur_result,WINDOW_AUTOSIZE);
//3、显示原图
imshow(median_blur_original, image);
//进行中值滤波操作
Mat result;
medianBlur(image, result, 7);
//4、显示效果图
imshow(median_blur_result, result);
waitKey(0);
}
int main()
{
test();
system("pause");
return 0;
}
6、双边滤波:bilateralFilter函数的使用
结果
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()
{
//1、 载入原图
Mat srcImage = imread(image_path);
//2、创建窗口
namedWindow(bilateralFilter_original);
namedWindow(bilateralFilter_result);
//3、显示原图
imshow(bilateralFilter_original, srcImage);
//4、进行双边滤波操作
Mat result;
bilateralFilter(srcImage, result, 25, 25 * 2, 25 / 2);
//5、显示效果图
imshow(bilateralFilter_result, result);
waitKey(0);
}
int main()
{
test();
system("pause");
return 0;
}
7、综合示例:图像滤波
结果
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; }
//克隆原图到四个Mat类型中
g_dstImage1 = g_srcImage.clone();
g_dstImage2 = g_srcImage.clone();
//显示原图
namedWindow(image_original, WINDOW_AUTOSIZE);
imshow(image_original, g_srcImage);
//=================【<2>中值滤波】===========================
//创建窗口
namedWindow(median_blur_result, WINDOW_AUTOSIZE);
//创建轨迹条
createTrackbar("参数值:", median_blur_result, &g_nMedianBlurValue, 50, FunMedianBlur);
FunMedianBlur(g_nMedianBlurValue, 0);
//=======================================================
//=================【<3>双边滤波】===========================
//创建窗口
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函数的使用
结果
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()
{
//1、载入原图
Mat src_image = imread(image_path);
//2、创建窗口
namedWindow(dilate_original, WINDOW_AUTOSIZE);
namedWindow(dilate_result, WINDOW_AUTOSIZE);
//3、显示原图
imshow(dilate_original, src_image);
//4、进行膨胀操作
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
Mat result;
dilate(src_image, result, element);
//6、显示效果图
imshow(dilate_result, result);
waitKey(0);
}
int main()
{
test();
system("pause");
return 0;
}
9、腐蚀:erode函数的使用
结果
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()
{
//1、载入原图
Mat srcImage = imread(image_path);
//2、显示原图
imshow(erode_original, srcImage);
//3、进行腐蚀操作
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
Mat dstImage;
erode(srcImage, dstImage, element);
//4、显示效果图
imshow(erode_result, dstImage);
waitKey(0);
}
int main()
{
test();
system("pause");
return 0;
}