当前位置:网站首页>【滤波与卷积(二)】
【滤波与卷积(二)】
2022-04-22 16:39:00 【yangyang_z】
文章目录
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;
}
版权声明
本文为[yangyang_z]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_43488529/article/details/124289656
边栏推荐
- [Unity] 战斗系统学习 12:Switchable
- Detailed data of db107-asemi rectifier bridge
- In 2023, Wuhan University of technology energy and power (085800) took the postgraduate entrance examination and landed. Experience guidance of predecessors in preparing for the examination
- Gome retail takes advantage of the east wind of digital economy to create a "boat body" consumption experience
- Use of serial port data plot serialplot
- i.MX6ULL驱动开发 | 21 - 按键驱动使用 input 子系统上报事件
- Blue Bridge Cup exercise 016
- An error is reported in the automatic database backup, indicating that SQLServerAgent is not currently running, so it cannot be notified of this operation.
- How to select one of the two lines that coincide in SolidWorks
- Linux Mysql 8 修改密码 Your password does not satisfy the current policy requirements
猜你喜欢

TM of NLP: Based on gensim library, call 20newsgr to learn doc topic distribution and save it as train SVM LDA txt、test-svm-lda. txt

This API hub is powerful. It contains open APIs such as nailing enterprise wechat, and can be debugged directly!

Random talk on homology strategy (SOP) and cross domain resource sharing (CORS)

Industry research: the development trend of domestic databases from the perspective of manufacturers

国美新动作“真选”“严选”赋能 多维度护航品质消费

frp反向代理

The 14th issue of HMS core discovery reviews the long article | enjoy the silky clip and release the creativity of the video

Unittest - unit test 2

Ten thousand yuan gift pool! Play "Lighthouse" award-winning essay attack

AQS源码阅读
随机推荐
蓝桥杯练习013
Golang的JWT权限校验解析
From thinking to practice, digital transformation is the successful path of it operation
网络舆情监控系统
Blue Bridge Cup exercise 016
记一次对oracle数据库表空间异常增长的分析和处理
web安全工具Burp_suite安装及使用教程(专业版)
An error is reported in the automatic database backup, indicating that SQLServerAgent is not currently running, so it cannot be notified of this operation.
RT-Thread Studio 对代码进行格式化
双向循环链表创建
Dynamically drag the width of two divs
MINIUSB pin interface pin definition
最新流程引擎 flowable 6.7.2 更新说明
Domain driven model DDD (III) -- using saga to manage transactions
敏捷实践 | 提高小组可预测性的敏捷指标
接口测试 Mock 实战(二) | 结合 jq 完成批量化的手工 Mock
Blue Bridge Cup exercise 012
Experiment 4: KNN, naive Bayes of data mining
Summary of process and principle of solution to concurrency problem (form repeated submission problem)
蓝桥杯练习011