为程序界面添加滑动条

  • 在以前的教程中 (例如 linear blending 和 brightness and contrast adjustments)你有可能注意到需要 input 一些数值到我们的程序中, 例如 和  。我们会在代码中输入这些数据来配合程序的运行。

  • 好, 下面来介绍所要用到的一个 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);

  1. 现在可以创建滑动条了:

    createTrackbar( TrackbarName, "Linear Blend", &alpha_slider, alpha_slider_max, on_trackbar );
    

    记住下面的参数介绍:

    • 在标签中显示的文字(提示滑动条的用途) TrackbarName
    • 创建的滑动条要放置窗体的名字 “Linear Blend”
    • 滑动条的取值范围从  到 alpha_slider_max (最小值只能为 zero).
    • 滑动后的值存放在 alpha_slider 变量里
    • 每当滑动条的值改变, 就会调用 on_trackbar 回调函数
  2. 最后, 我们还要定义这个回调函数 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 的值会在滑动条滑动后被修改.
    • 我们所定义的 src1src2distalphaalpha_slider 和 beta 都是全局变量, 因此也可以在回调函数中使用.

结果

  • 下图是程序的运行结果:

  • 也可以使用其它方式验证, 你可以用 改变图像的对比度和亮度 中的例程实现两个滑动条. 一个控制  另一个控制 . 可能的输出会是下面的样子:

为程序界面添加滑动条相关推荐

  1. OpenCV之highgui 模块. 高层GUI和媒体I/O: 为程序界面添加滑动条 OpenCV的视频输入和相似度测量 用OpenCV创建视频

    为程序界面添加滑动条 在以前的教程中 (例如 linear blending 和 brightness and contrast adjustments)你有可能注意到需要 input 一些数值到我们 ...

  2. 【OpenCV 】计算物体的凸包/创建包围轮廓的矩形和圆形边界框/createTrackbar添加滑动条/

    目录 topic 1:模板匹配 topic 2:图像中寻找轮廓 topic 3:计算物体的凸包 topic 4:轮廓创建可倾斜的边界框和椭圆¶ topic 5:轮廓矩¶ topic 6:为程序界面添加 ...

  3. 文字太多时给文本框添加滑动条——text + ContentSizeFitter + Scroll View

    文字少的时候,直接显示文字:文字多的时候,自动添加滑动条,拖动滑动条后查看全部文字. 1.字少的时候 2.字多的时候自动增加一个垂直滑动条 一.问题的来源 在一个固定区域显示文字,这些文字有时候会很多 ...

  4. Markdown 如何自动给长代码块添加滑动条 / 文本选择性隐藏

    Markdown 如何自动给长代码块添加滑动条 / 文本选择性隐藏 当用 Markdown 进行文档编辑时,遇到长代码或者长文本无法进行展示,这时我们就可以用如下两种方式,让我们的长文本仅占一个小区间 ...

  5. 微信小程序 如何添加一条分割线

    <view class="container"><!-- 分割线 --><view class="divLine">< ...

  6. Java学习day078 Swing用户界面组件(四:选择组件)(复选框、单选钮、边框、组合框、滑动条)

    使用的教材是java核心技术卷1,我将跟着这本书的章节同时配合视频资源来进行学习基础java知识. day078   Swing用户界面组件(四:选择组件)(复选框.单选钮.边框.组合框.滑动条) 前 ...

  7. 利用ztree开发带有滑动条的地图图层列表

    之前在写安卓移动端时候,有这样的一个对地图多个图层管理界面,即在单独写了一个图层面板,里面列举app的所有图层,如果懂得Android开发方面的小伙伴,就是一个ListView里面添加了SeekBar ...

  8. 【opencv3】滑动条调节RGB颜色阈值并输出滑动条的值

    一.实现目标 首先对图像 RGB 色彩空间进行分割,然后根据分割出来的各个通道的图像进行二值化处理,通过滑动条(cvCreateTrackbar)可以调节二值化的阈值. 二.程序1 // 利用滑动条调 ...

  9. UE4-UI用滑动条切换图片

    UE4-UI用滑动条切换图片 1.准备工作 添加5张纹理图片,新建一个控件蓝图 2.UI创建 右击画布包裹边界 添加滑动条和文本控件 根据个人喜好,调整控件位置 分别将滑动条和文本改为可编辑的,让他能 ...

  10. 小程序自制自带滑动条的表格组件

    小程序自制自带滑动条的表格组件 在编写过程中遇到的难点 1. 表格的编写 2. 表格内容宽度固定 长度自适应 3. 滚动条逻辑及代码编写 4. 滚动条的卡段优化 5. 小程序组件的编写及应用 尾声 先 ...

最新文章

  1. c语言写输入汉字输出区位码程序,2017年计算机应用基础检测试题
  2. Datawhale组队学习周报(第010周)
  3. MySQL升级教程(CentOS)
  4. linux last 命令年份,【帝联运维课堂】(第七十二期)Linux下last命令如何显示年份...
  5. 【运营干货】段子手打死也不会告诉广告主的事:一篇新媒体文案如何才能引发用户分享?...
  6. mysql 索引 lt =,当同时使用gt; =和lt; =时如何索引MySQL表?
  7. [vb]格式输出Format函数
  8. Java、Node.js、PHP还是.Net? 无论你选谁,我都能教你一招!
  9. 关于防止sql注入的几种手段
  10. Codeforces Round #419 Div. 1
  11. python小_Python 小入坑
  12. 一份比较详尽的ubuntu下替代windows下的软件列表
  13. 计算机毕业设计源码—SpringBoot+Vue疫情防控管理系统
  14. 软件概要设计如何写(文档恐惧症的程序猿必读)
  15. linux运行海康的sdk,海康摄像头SDK在Linux、windows下的兼容问题(二)已解决
  16. Games104 gameplay系统笔记
  17. PHP使用FPDF的多字体解决
  18. 函数概念 返回值 参数
  19. altera DCFIFO IP核 功能仿真
  20. 微信小程序时间传值错误解决办法

热门文章

  1. JAVA 基础语法(六)——方法(函数)
  2. java ognl 值栈_ognl-值栈基本操作
  3. Luogu1886 滑动窗口 /【模板】单调队列
  4. Luogu1156 垃圾陷阱
  5. MongoDB学习(黑马教程)-7-数据库MongoDB的集合关联
  6. gpasswd 附属组管理,添加用户到附属组中
  7. Linux必须熟记的文件
  8. c++ 自定义 比较器 priority_queue_吃透Java集合系列七:PriorityQueue
  9. c语言 键盘 屏幕,c语言之键盘输入语屏幕输出.pptx
  10. java mongodb geo,通过GeoServer在MongoDB中提供地理空间数据