一、函数原型:
CV_EXPORTS int createTrackbar(const String& trackbarname, const String& winname,
int* value, int count, TrackbarCallback onChange = 0, void* userdata = 0);
二、函数功能:
createTrackbar
函数用于创建一个滑动条(也称为范围控件或滑块),它可以在指定的窗口中显示,并与一个整数值同步位置。
三、滑动条的显示:
- 滑动条将显示在指定名称的窗口
winname
中。如果使用Qt后端,且滑动条应该附加到控制面板,winname
可以为空。
四、参数:
trackbarname
:创建的滑动条的名称。winname
:用作滑动条父窗口的窗口名称。value
:指向整型变量的可选指针,该变量的值反映了滑动条的位置。在创建时,滑动条的位置由这个变量定义。count
:滑动条的最大位置。最小位置始终是0。onChange
:每次滑动条改变位置时将被调用的回调函数的指针。如果回调函数是NULL指针,则不调用回调,只更新value
。userdata
:作为参数传递给回调的用户数据。它可以用来处理滑动条事件,而无需使用全局变量。
五、回调函数:
onChange
参数指向的回调函数应该具有以下原型:void Foo(int,void*);
,其中第一个参数是滑动条的位置,第二个参数是用户数据。
六、Qt后端特定:
- 在Qt后端中,如果滑动条应该附加到控制面板而不是特定窗口,
winname
可以是空字符串。
七、手动编辑:
- 点击每个滑动条的标签可以手动编辑滑动条的值。
八、返回值:
- 函数返回创建的滑动条的ID,这个ID可以用于在其他操作中引用滑动条。
九、示例代码:
#include <opencv2/core/utils/logger.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/objdetect.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>
using namespace cv;
using namespace std;
//回调函数
void callback(int th, void* data)
{
//强制类型转换
Mat src = *((Mat*)data);
//定义输出图片容器
Mat dst;
//二值化函数
threshold(src, dst, th, 255, CV_THRESH_BINARY);// value = value > threshold ? max_value : 0
imshow("image", dst);
}
//主函数
int main()
{
utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT);// 设置日志级别为不输出任何日志信息(通过隐藏日志的方式,不打印此信息)
//定义图像容器
Mat srcMat;
Mat gryMat;
//初始化滑动条的值,并设置滑动节的调节范围
int lowth = 100;
int maxth = 255;
//读取图片
srcMat = imread("C:\\Users\\86173\\Desktop\\TI\\Q版阿离.png");
//判断图片读取是否成功
if (srcMat.empty())
{
cout << "fail to read!" << endl;//读取失败
}
//转化为灰度图
cvtColor(srcMat, gryMat, CV_BGR2GRAY);//(原图像,输出图像)
//显示灰度图
namedWindow("image");
imshow("image", gryMat);
//创建滑动条函数
createTrackbar("slider", "image", &lowth, maxth, callback, &gryMat);
waitKey(0);
destroyAllWindows();
return 0;
}