opencv c++函数 highgui模块 1 为程序界面添加滑动条
2013-05-03 14:44
375 查看
在以前的教程中 (例如 linear blending 和 brightness and contrast adjustments)你有可能注意到需要 input 一些数值到我们的程序中, 例如
和
。我们会在代码中输入这些数据来配合程序的运行。
好, 下面来介绍所要用到的一个 GUI 中的工具. OpenCV 提供的 GUI 库在(highgui.h)里. 这是一个 滑动条 的样子
在这里教程指导我们修改以前的方案,以便从滑动条中获得那些需要输入数据.
在这节教程中你将学习:
使用OpenCV函数 createTrackbar 在窗口中添加一个滑动条:
首先来修改一下教程中 使用OpenCV对两幅图像求和(求混合(blending)) 这个例子.
用滑动条来动态输入
这个值.
我们只分析关于滑动条的那段代码:
#.首先, 我们加载了两个图像, 目的是把它们混合显示.
#.在创建滑动条之前, 我们要先创建一个窗体,以便把创建的滑动条放置在上面:
现在可以创建滑动条了:
记住下面的参数介绍:
在标签中显示的文字(提示滑动条的用途) TrackbarName
创建的滑动条要放置窗体的名字 “Linear Blend”
滑动条的取值范围从
到 alpha_slider_max (最小值只能为 zero).
滑动后的值存放在 alpha_slider 变量里
每当滑动条的值改变, 就会调用 on_trackbar 回调函数
最后, 我们还要定义这个回调函数 on_trackbar 来实现我们想要的结果
注意回调函数中的整型与双精度型的转换:
从滑动条中获取的整型值 alpha_slider (integer) 要转换为双精度类型 alpha.
alpha_slider 的值会在滑动条滑动后被修改.
我们所定义的 src1, src2, dist, alpha, alpha_slider 和 beta 都是全局变量, 因此也可以在回调函数中使用.
下图是程序的运行结果:
也可以使用其它方式验证, 你可以用 改变图像的对比度和亮度 中的例程实现两个滑动条.
一个控制
另一个控制
.
可能的输出会是下面的样子:
和
。我们会在代码中输入这些数据来配合程序的运行。
好, 下面来介绍所要用到的一个 GUI 中的工具. OpenCV 提供的 GUI 库在(highgui.h)里. 这是一个 滑动条 的样子
在这里教程指导我们修改以前的方案,以便从滑动条中获得那些需要输入数据.
目标
在这节教程中你将学习:使用OpenCV函数 createTrackbar 在窗口中添加一个滑动条:
代码
首先来修改一下教程中 使用OpenCV对两幅图像求和(求混合(blending)) 这个例子.用滑动条来动态输入
这个值.
#include <cv.h> #include <highgui.h> using namespace cv; /// 全局变量的声明与初始化 const int alpha_slider_max = 100; int alpha_slider; double alpha; double beta; /// 声明存储图像的变量 Mat src1; Mat src2; Mat dst; /** * @function on_trackbar * @定义响应滑动条的回调函数 */ void on_trackbar( int, void* ) { alpha = (double) alpha_slider/alpha_slider_max ; beta = ( 1.0 - alpha ); addWeighted( src1, alpha, src2, beta, 0.0, dst); imshow( "Linear Blend", dst ); } int main( int argc, char** argv ) { /// 加载图像 (两图像的大小与类型要相同) src1 = imread("../../images/LinuxLogo.jpg"); src2 = imread("../../images/WindowsLogo.jpg"); if( !src1.data ) { printf("Error loading src1 \n"); return -1; } if( !src2.data ) { printf("Error loading src2 \n"); return -1; } /// 初始化为零 alpha_slider = 0; /// 创建窗体 namedWindow("Linear Blend", 1); /// 在创建的窗体中创建一个滑动条控件 char TrackbarName[50]; sprintf( TrackbarName, "Alpha x %d", alpha_slider_max ); createTrackbar( TrackbarName, "Linear Blend", &alpha_slider, alpha_slider_max, on_trackbar ); /// 结果在回调函数中显示 on_trackbar( alpha_slider, 0 ); /// 按任意键退出 waitKey(0); return 0; }
程序说明
我们只分析关于滑动条的那段代码:#.首先, 我们加载了两个图像, 目的是把它们混合显示.
src1 = imread("../../images/LinuxLogo.jpg"); src2 = imread("../../images/WindowsLogo.jpg");
#.在创建滑动条之前, 我们要先创建一个窗体,以便把创建的滑动条放置在上面:
namedWindow("Linear Blend", 1);
现在可以创建滑动条了:
createTrackbar( TrackbarName, "Linear Blend", &alpha_slider, alpha_slider_max, on_trackbar );
记住下面的参数介绍:
在标签中显示的文字(提示滑动条的用途) TrackbarName
创建的滑动条要放置窗体的名字 “Linear Blend”
滑动条的取值范围从
到 alpha_slider_max (最小值只能为 zero).
滑动后的值存放在 alpha_slider 变量里
每当滑动条的值改变, 就会调用 on_trackbar 回调函数
最后, 我们还要定义这个回调函数 on_trackbar 来实现我们想要的结果
void on_trackbar( int, void* ) { alpha = (double) alpha_slider/alpha_slider_max ; beta = ( 1.0 - alpha ); addWeighted( src1, alpha, src2, beta, 0.0, dst); imshow( "Linear Blend", dst ); }
注意回调函数中的整型与双精度型的转换:
从滑动条中获取的整型值 alpha_slider (integer) 要转换为双精度类型 alpha.
alpha_slider 的值会在滑动条滑动后被修改.
我们所定义的 src1, src2, dist, alpha, alpha_slider 和 beta 都是全局变量, 因此也可以在回调函数中使用.
结果
下图是程序的运行结果:也可以使用其它方式验证, 你可以用 改变图像的对比度和亮度 中的例程实现两个滑动条.
一个控制
另一个控制
.
可能的输出会是下面的样子:
相关文章推荐
- OpenCV之highgui 模块. 高层GUI和媒体I/O: 为程序界面添加滑动条 OpenCV的视频输入和相似度测量 用OpenCV创建视频
- 为程序界面添加滑动条--createTrackbar()
- 为程序界面添加滑动条
- opencv c++函数 highgui模块 2 OpenCV的视频输入和相似度测量
- 为程序界面添加滑动条
- opencv2-为程序界面添加滑动条
- matlab带GUI界面程序的打包发布
- OpenCV学习笔记:opencv_highgui模块
- 用C#打包应用程序(安装程序)【卸载模块已添加】
- 使用Perl/Tk模块建立可视化图形GUI界面2
- java 图形用户界面设计 之 在界面中添加菜单栏 示例程序及相关方法介绍
- 在部署一个IIS7程序时的问题 模块列表中不存在为此处理程序指定的一个或多个模块。如果您尝试添加脚本 映射,则 IsapiModule 或 CgiModule 不会显示在模块列表中
- OpenCV学习笔记18 OpenCV高级GUI和多媒体模块 HIGHGUI MODULE (二)
- OpenCV学习笔记19 OpenCV高级GUI和多媒体模块 HIGHGUI MODULE (三)
- C#打包应用程序(安装程序)【卸载模块已添加】
- 如何给程序界面添加背景图片
- 给WPF程序添加启动界面的简单方法
- (转)手把手教你用C#打包应用程序(安装程序)【卸载模块已添加】
- [Unity]界面GUI程序常用的脚本类
- 手把手教你用C#打包应用程序(安装程序)【卸载模块已添加】