createTrackbar接口定义:
int cv::createTrackbar(const String& trackbarName, const String& winName,
int* value, int count, TrackbarCallback callback,
void* userdata)
参数解释:
trackbarName:滚动条名称
winName:滚动条依附的图像窗口的名称
value:滚动条数值,需初始化
count:滚动条最大值
callback:回调函数
userdata:用户传给回调函数的数据,用来处理轨迹条事件
代码示例:
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
Mat src, dst, m;
int lightness = 0; // 定义初始的亮度为0
static void on_track(int, void*)
{
m = Scalar(lightness, lightness, lightness); // 创建调整亮度的数值
subtract(src, m, dst); // 定义亮度变化为减
imshow("brightness adjustment", dst); // 显示调整亮度之后的图片
}
class QuickDemo
{
public:
void tracking_bar_demo(Mat &image);
};
void QuickDemo::tracking_bar_demo(Mat &image)
{
namedWindow("brightness adjustment", WINDOW_AUTOSIZE);
dst = Mat::zeros(image.size(), image.type()); // 图片的初始化创建一个和image大小相等,种类相同的图像
m = Mat::zeros(image.size(), image.type()); // 图片的初始化创建一个和image大小相等,种类相同的图像
src = image;
int max_value = 100; // 定义最大值为100
createTrackbar("Value Bar:", "brightness adjustment", &lightness, max_value, on_track); // 调用函数实现功能
on_track(0, 0);
}
int main()
{
Mat image = imread("D:\\c++_opencv\\images\\0--Parade_0_Parade_marchingband_1_20.jpg", IMREAD_ANYCOLOR);
if (image.empty())
{
printf("could not load image");
return -1;
}
namedWindow("input image", WINDOW_AUTOSIZE);
imshow("input image", image);
QuickDemo qd;
qd.tracking_bar_demo(image);
waitKey(0);
destroyAllWindows();
return 0;
}
结果展示:
![](https://i-blog.csdnimg.cn/blog_migrate/8b530e7e254df01049952ff81146be1e.png)