opencv(九)之轨迹条条创建和使用createTrackbar
来源:互联网 发布:淘宝注销账号怎么注销 编辑:程序博客网 时间:2024/05/01 22:26
上篇介绍图像混合时,需要设置两幅图像的权重,每次改变图像权重只能从代码改变,没有那么直观。opencv提供了一种称为轨迹条或滑动条(Trackbar)的控件工具,能够直观的改变出现处理时的参数,实时看到更改这些参数时对于图像处理结果的影响。
1. createTrackbar()函数
createTrackbar()函数用来创建一个可以调节输入变量值的滑动条,并将改控件依附于指定的窗口上。在使用时需要和一个回调函数配合使用。其原型如下:
CV_EXPORTS int createTrackbar(const string& trackbarname, const string& winname, int* value, int count, TrackbarCallback onChange = 0, void* userdata = 0);
其各个参数含义如下:
. const string& trackname: 滑动条名字
. const string& winname: 想要把该滑动条依附到的窗口名字,在程序中可能该窗口名称由namedWindow()声明。
. int* value: 创建滑动条时,滑动条的初始值
. int count: 滑动条的最大值,即所有滑动条的数据变动都要在0-count之间,滑动条最小值为0
. TrackbarCallback onChange = 0: 这是指的回调函数,每次滑动条数据变化时都对该函数进行回调
. void* userdata = 0: 这个是用户传给回调函数的数据,用来处理滑动条数值变动。如果在创建滑动条时,输入value实参是全局变量,则本参数userdata可使用默认值0.
#include <iostream>#include <stdio.h>#include <opencv2/core.hpp>#include <opencv2/highgui.hpp>using namespace std;using namespace cv;//声明全局变量const int g_nTrackbarMaxValue = 100; //滑动条最大值int g_nTrackbarValue; //滑动条对应的值double g_dAlphaValue; //第一幅图权重double g_dBetaValue; //第二幅图权重Mat g_srcImage1, g_srcImage2, g_distImage;//声明回调函数void on_Trackbar(int, void*); int main(){ g_srcImage1 = imread("forest.jpg"); g_srcImage2 = imread("rain.jpg"); //判断图像是否加载成功 if(g_srcImage1.data && g_srcImage2.data) cout << "图像加载成功!" << endl << endl; else { cout << "图像加载失败!" << endl << endl; return -1; } namedWindow("混合后图像",WINDOW_NORMAL); //滑动条依附的窗口 g_nTrackbarValue = 20; //设置滑动条初始值 //在创建的窗体中创建滑动条控件并命名 char trackBarName[100]; /*Linux下使用sprintf需要添加头文件"stdio.h" *在Windows下微软一直在推广其安全函数即后缀加上_s *否则会有警告出现 *所以本段代码将有两个版本*/ sprintf(trackBarName, "透明度 %d", g_nTrackbarMaxValue); //Linux版本语句 //sprintf_s(trackBarName, "透明度 %d", g_nTrackbarMaxValue); //Windows版本语句 createTrackbar(trackBarName, "混合后图像", &g_nTrackbarValue, g_nTrackbarMaxValue, on_Trackbar); on_Trackbar(g_nTrackbarValue, 0); //结果在回调函数中显示 waitKey(0); return 0;}void on_Trackbar(int, void*){ //图像融合的权重在0-1之间,转换输入值和权重之间的比例 g_dAlphaValue = (double) g_nTrackbarValue / g_nTrackbarMaxValue; g_dBetaValue = 1.0 - g_dAlphaValue; //第二幅图像权重 //使用addWeighted函数对图像进行线性混合 addWeighted(g_srcImage1, g_dAlphaValue, g_srcImage2, g_dBetaValue, 0.0, g_distImage); imshow("混合后图像", g_distImage);}
运行结果如下:
这里需要说明的是滑动条中的回调函数原型必须为:
void FunctionName(int, void*);
第一个参数是滑动条位置,第二个参数是userdata即用户数据。回调函数是通过函数指针调用的函数,如果回调是NULL指针表示没有回调函数的调用。
2. getTrackbarPos()函数
这个函数用于获取当前轨迹条的位置并返回,与createTrackbar()函数配合使用。其函数原型如下:
CV_EXPORTS_W int getTrackbarPos(const string& trackbarname, const string& winname);
.const string& trackbarname: 滑动条名称
.const string& winname: 滑动条所依附窗口的名称
- opencv(九)之轨迹条条创建和使用createTrackbar
- opencv-createTrackbar函数创建轨迹条的应用
- createTrackbar函数创建和使用轨迹条,以及图像对比度、亮度值的动态调整
- OpenCV之轨迹条(TrackBar)的创建和使用
- 【OpenCV笔记 02】OpenCV滑动条的创建和使用——createTrackbar()函数
- opencv创建createTrackbar滑动条
- opencv之highgui中createTrackbar
- OpenCv基础(四):Trackbar(轨迹条)的创建和使用
- OpenCV创建滑动条函数:createTrackbar()介绍
- OpenCV createTrackbar()
- Opencv- createTrackbar()
- openCV:滑动条之setTrackbarPos与createTrackbar
- 【拜小白opencv】9-滑动条(滚动条)创建与实现;createTrackbar()函数
- OpenCV 创建Trackbar 轨迹条
- 学习OpenCV:createTrackbar
- 创建滑动条createTrackbar()
- OpenCV学习笔记(11)createTrackbar使用方法及步骤
- 建轨迹条——createTrackbar函数
- 【NOIP】NOIP考纲总结+NOIP考前经验谈
- 【数据结构】浅析B树
- 对数组名与指针的认识
- 第十二周项目1-图基本算法库
- axis2+spring集成
- opencv(九)之轨迹条条创建和使用createTrackbar
- js导出EXCLE
- 01UI-day3-151228
- readyState的五种状态
- 图邻接表有向表代码简洁实现
- SourceTree初学
- Android7.0 Messaging源码分析(0) - 启动篇
- 01UI-day4-151229
- NOIP2016考前总结