摘要:主要记录滑动条函数使用方法

创建滑动条函数:
C++:
int createTrackbar(const string& trackbarname, const string& winname, int* value, int count, TrackbarCallback onChange=0, void* userdata=0)

参数:
trackbarname=》所创建的跟踪条的名字

winname=》跟踪条所依附的窗口的名字

value=》可选的指向整型变量的指针,整型变量的值对应于滑动条的位置。初始创建时,滑动条的值就是这个整型变量的值。

count=》滑动条最大的值。最小值总是为0。

onChange=》指向回调函数的指针,每次滚动条改变位置时,这个函数就会被调用。这个函数的原型应该为:void Foo(int, void*);其中第一个参数是跟踪条的位置,第二个参数是用户数据(见下一个参数)。如果回调为空,表示没有回调函数被调用,仅仅value会有变化。

userdata=》通过回调函数传递的用户数据。它可以控制跟踪条事件而不需要使用全局变量。
这个createTrackbar函数创建一个具有特定名称和范围的轨迹条(滚动条,或者说是滑块范围控制工具),指定一个和轨迹条位置同步的变量。而且要指定回调函数,在轨迹条位置改变的时候来调用这个回调函数。创建的轨迹条显示在指定的winname所代表的窗口上。

注:如果回调函数中使用的是全局变量 则userdata可以默认为0(空)

回调函数解释:

知乎神答:

https://www.zhihu.com/question/19801131

百度百科:

https://baike.baidu.com/item/%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0

我的理解就是把函数当作参数传到另一个函数中,当另一个函数运行时,遇到特定条件可以触发传进来的调用函数。回调函数是丫鬟,主调函数是主人。

示例中展示了回调函数中的userdata使用的一种情况:

#include <iostream>
#include <opencv/cv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>using namespace std;
using namespace cv;//定义了窗体名
string winName = "二值化";//TrackBar发生改变的回调函数
void onChangeTrackBar(int pos, void* userdata);//主函数
int main()
{//trackbar名string trackBarName = "pos";//图像文件名string imgName = "1.jpg";//trackbar的值int posTrackBar = 0;//trackbar的最大值int maxValue = 255;Mat img;//读入图像,以灰度图形式读入img = imread(imgName, 0);//新建窗口namedWindow(winName);imshow(winName, img);//创建trackbar,我们把img作为数据传进回调函数中createTrackbar(trackBarName, winName, &posTrackBar, maxValue, onChangeTrackBar, &img);waitKey();return 0;
}// 回调函数
void onChangeTrackBar(int pos, void* usrdata)
{// 强制类型转换Mat src = *(Mat*)(usrdata);Mat dst;// 二值化threshold(src, dst, pos, 255, 0);imshow(winName, dst);
}

OpenCV学习笔记七-创建滑动条相关推荐

  1. OpenCV学习笔记(七)——图像梯度及边缘检测

    图像梯度计算的是图像变化的速度.对于图像的边缘部分,其灰度值变化较大,梯度值也较大:相反,对于图像中比较平滑的部分,其灰度值变化较小,相应的梯度值也较小.一般情况下,图像梯度计算的是图像的边缘信息. ...

  2. 利用OpenCV的函数createTrackbar创建滑动条查看二值化的最优阈值的源码及讲解

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 这个功能的实现其实很简单,主要是要明白creat ...

  3. Opencv学习笔记七(梯度算子、锐化)

    Sobel算子 卷积的作用除了实现图像模糊或者去噪,还可以寻找一张图像上所有梯度信息,这些梯度信息是图像的最原始特征数据,进一步处理之后就可以生成一些比较高级.抽象的特征用来表示一张图像实现基于图像特 ...

  4. OpenCV学习笔记:创建/分配图像、图像读写保存、图像像素点访问修改

    环境:CentOS7 g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16) $ pkg-config --modversion opencv 2.4.13 以下程序的 ...

  5. opencv学习笔记七:绘图和注释

    艺术线条和填充多边形 画直线或者其他图形(虚线,圆,矩形等)的函数都接受宽度(thickenss)和线性(lineType)的参数,这两个都是整型的,但第二个参数的值只能是4,8或者cv::LINE_ ...

  6. opencv计算图像亮度调节_【opencv学习笔记七】访问图像中的像素与图像亮度对比度调整...

    今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对 ...

  7. 分水岭算法java,OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法...

    1 使用普通摄像头进行深度估计 1.1 深度估计原理 这里会用到几何学中的极几何(Epipolar Geometry),它属于立体视觉(stereo vision)几何学,立体视觉是计算机视觉的一个分 ...

  8. Opencv学习笔记(八) -- 图像色彩空间转换

    1.常见图像色彩空间 RGB RGB色彩模式是工业界的一种颜色标准,是通过对红(R).绿(G).蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红.绿.蓝三个通道 ...

  9. OpenCV学习笔记与代码示例(三):张氏标定法标定相机原理及函数详解

    目录 1.张氏标定法基本原理 1.1相机针孔模型 1.2单应矩阵H 1.3求相机内参 1.4求相机外参 1.5优化参数 1.6总结 2.OpenCV实现 2.1特征点检测与靶标坐标初始化 2.2相机标 ...

最新文章

  1. KVM和qemu网络TAP模式桥接的设置
  2. WSUS部署中...
  3. VS2008 快捷键总结
  4. (转)Rust:Vec、String 内存布局
  5. Hillstone 防火墙流量命令
  6. 伺服电机编码器与转子磁极相位对齐方法
  7. 用学校邮箱使用微软OneDrive云存储空间5120G
  8. MongoDB快速入门学习
  9. oracle 计算时间差 毫秒,Oracle计算时间差为毫秒的实现代码
  10. Mac/Windows下如何使用安卓模拟器开发UniApp
  11. 6 生僻字_《生僻字》歌词拼音与注释,跟着音乐学汉字
  12. 加菲猫语录精选74 中英俄三语版
  13. DH-UAP(大华统一应用开发平台)简介
  14. 什么叫做社交电商,社交电商怎么做?
  15. 520表白纪念自适应单页源码
  16. 华硕RT-AC1200无法投屏的解决办法
  17. C# / VB.NET 在PPT中创建、编辑PPT SmartArt图形
  18. windows系统专业版纯净镜像下载
  19. JAVA四种内部类(详解)
  20. 模仿苹果手机屏保滚动条

热门文章

  1. 全球 MEDC 2007 举行日期
  2. 处理v-html的潜在XSS风险
  3. 报错空指针异常_让你为之颤抖的Java常见的异常exception
  4. python中双冒号_c++中冒号(:)和双冒号(::)的用法和c/c++ 位域结构体
  5. lcl手术和飞秒区别_干货科普:目前市面上4种近视手术方式有何区别(全飞秒、半飞秒、全激光、晶体植入)...
  6. SpringBoot实现定时任务
  7. ubuntu 16.04 安装QT问题
  8. 软件开发的MVC构架
  9. 2018/8/9 MultiU 6 并查集+dfs,反向建边提高查询效率 !!! / 最大字段和n维(降维)/ 状压+中途相遇法...
  10. form表单中的input有哪些类型