原型:int createTrackbar(const string& trackbarname, const string& winname, int* value, int count ,TrackbarCallback onChange = 0, void* userdata = 0);
参数1:轨迹条名字
参数2:窗口名字
参数3:滑块初始位置
参数4:表示滑块达到最大位置的值
参数5:默认值为0,指向回调函数
参数6:默认值为0,用户传给回调函数的数据值
代码示例:
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
static void on_ContrastAndBright(int, void *);
int g_nContrastValue;
int g_nBrightValue;
Mat srcImage, dstImage;
int main() {
// 读入图像
srcImage = imread("//Users//dwz//Desktop//cpp//1.jpg");
// dstImage = Mat::zeros(srcImage.size(), srcImage.type());
dstImage = srcImage.clone();
// 设定对比度和亮度的初值
g_nContrastValue = 80;
g_nBrightValue = 80;
// 创建效果图的窗口
namedWindow("xgt");
// 创建轨迹条
createTrackbar("contrast", "xgt", &g_nContrastValue, 300, on_ContrastAndBright);
createTrackbar("bright", "xgt", &g_nBrightValue, 200, on_ContrastAndBright);
// 进行回调函数初始化
on_ContrastAndBright(g_nContrastValue, 0);
on_ContrastAndBright(g_nBrightValue, 0);
// 按下q键时程序退出
while (char(waitKey(1)) != 'q') {}
return 0;
}
static void on_ContrastAndBright(int, void *){
namedWindow("ori", 1);
int rowNum = srcImage.rows;
int colNUm = srcImage.cols * srcImage.channels();
for (int i=0;i<rowNum;i++)
{
uchar* data = dstImage.ptr<uchar>(i);
for (int j = 0; j < colNUm; j++) {
data[j] = saturate_cast<uchar>(g_nContrastValue * 0.01 * data[j] + g_nBrightValue);
}
}
imshow("ori", srcImage);
imshow("xgt", dstImage);
}