OpenCv Trackbar学习与应用
我们之前在调整图像对比度以及混合图像的过程中用到过Trackbar,现在让我们系统的学习与应用Trackbar
1.头文件
#include <opencv2/highgui.hpp>
由于Trackbar属于highgui模块,所以需要包含头文件
2.createTrackbar()详解
int cv::createTrackbar ( const String & trackbarname,
const String & winname,
int * value,
int count,
TrackbarCallback onChange = 0,
void * userdata = 0
)
其中
trackbarname
表示滑动条名称,
winname
表示放置滑动条的窗口的名称,
value
为int* 类型,是一个指向整型的指针,表示滑块的位置。并且在创建时,滑块的初始位置就是该变量当前的值。,比如我初始值给1,变量在没有通过滑动条调整之前就是1,如果调整了滑动条,value的值会随着滑动条位置而变化。但注意初始值不是最小值,滑块最小的位置的值始终为0。
count
表示滑块可以达到的最大位置的值。
onChange
是TrackbarCallback类型的变量,其默认值为0。这是一个指向回调函数的指针,当其不为零时,每次滑块位置改变时,onchange这个函数都会进行回调,从而利用trackbar来调节图像。其回调函数格式如下:
void functionName(val,void*)
{
//具体操作
}
其中,val为value对应的整型数据的数值(之前的value指针对应的整型变量作为参数传入),而void是指下面的userdata
userdata
是void类型的,他也有默认值0。这个参数是用户传给回调函数的数据,用来处理轨迹条事件。如果使用的第三个参数value实参是全局变量或者可以传给回调函数的话,完全可以不去管这个userdata参数。
3Trackbar应用
Trackbar好多例子是返回全局变量,调用回调函数。其实,你可以利用
int getTrackbarPos(const string& trackbarname, const string& winname)
把其返回值当作一个可以通过trackbar实时调节的变量就行了,然后把其传给需要用到这个变量的函数就可以了,而不需要刻意使用回调函数
3.2 Trackbar应用
调节对比度,亮度以及图像的融合,前面已经做过,也不赘余了,感兴趣的可以看看教程里的代码