createTrackbar函数使用

来源:互联网 发布:淘宝网店策划案怎么写 编辑:程序博客网 时间:2024/06/08 04:48

createTrackbar函数使用

声明:文中部分代码和语言摘录自毛星云所著《OpenCV3编程入门一书以及他的博客,如有侵权,请联系我编辑》

createTrackbar是OpenCV中的API,其可在显示图像的窗口中快速创建一个滑动控件,用于手动调节阈值,具有非常直观的效果。

1、函数定义

CV_EXPORTS int createTrackbar(const string& trackbarname, const string& winname,int* value, int count,TrackbarCallback onChange = 0,void* userdata = 0);

第一个参数,const string&类型的trackbarname,表示轨迹条的名字,用来代表我们创建的轨迹条。
第二个参数,const string&类型的winname,填窗口的名字,表示这个轨迹条会依附到哪个窗口上,即对应namedWindow()创建窗口时填的某一个窗口名。
第三个参数,int* 类型的value,一个指向整型的指针,表示滑块的位置。并且在创建时,滑块的初始位置就是该变量当前的值。
第四个参数,int类型的count,表示滑块可以达到的最大位置的值。PS:滑块最小的位置的值始终为0。
第五个参数,TrackbarCallback类型的onChange,首先注意他有默认值0。这是一个指向回调函数的指针,每次滑块位置改变时,这个函数都会进行回调。并且这个函数的原型必须为void XXXX(int,void*);其中第一个参数是轨迹条的位置,第二个参数是用户数据(看下面的第六个参数)。如果回调是NULL指针,表示没有回调函数的调用,仅第三个参数value有变化。
第六个参数,void*类型的userdata,他也有默认值0。这个参数是用户传给回调函数的数据,用来处理轨迹条事件。如果使用的第三个参数value实参是全局变量的话,完全可以不去管这个userdata参数

typedef void (CV_CDECL *TrackbarCallback)(int pos, void* userdata);  

该回调函数的形参有两个,分别是pos变量,即用在滑动条的变量,另一个是void*类型的userdata,在调用时有默认值为0。

2.使用

#include <iostream>#include <opencv2/opencv.hpp>using namespace std;using namespace cv;/*为了能在被调函数中使用,所以设置成全局的*/static int val;static void back(int, void*);static Mat srcImage, dstImage;int main(){    namedWindow("滑动条测试");    srcImage = imread("1.jpg");    dstImage = srcImage.clone();    val = 100;    createTrackbar("变量值", "滑动条测试", &val, 300, back,0);    imshow("原图", srcImage);    waitKey();}static void back(int, void*){    threshold(srcImage, dstImage, val, 255, CV_THRESH_BINARY);    imshow("滑动条测试", dstImage);}

这里写图片描述

原创粉丝点击