OpenCV学习笔记七-创建滑动条

摘要:主要记录滑动条函数使用方法
创建滑动条函数:
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);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值