全局变量
Mat adjMat,srcImg; int bright,constrast;
adjMat为调整后图像,srcImg为调整前图像
bright为调整亮度,从0-300,像素值加上亮度值后减去150,就可以在-150到+150之间调整
contrast为对比度值,从0-300,像素值乘上contrast再乘上0.01后,就可以从0倍到3倍之间调整
main函数里的主要内容
main函数创建了一个显示窗口和两个滑动条,这里两个滑动条用同一个回调函数
namedWindow("亮度和对比度", CV_WINDOW_NORMAL); createTrackbar("亮度条", "亮度和对比度", &bright, 300, on_brightandcontrast, NULL); createTrackbar("对比度条", "亮度和对比度", &contrast, 300, on_brightandcontrast, NULL);
createTracker函数参数解释
参数一 滑动条名
参数二 滑动条所在窗口名
参数三 滑动块的位置会自动赋给这个指针指向的变量
参数四 滑动条最大值
参数五 回调函数
参数六 调用回调函数时的额外数据
两个滑动条的回调函数
void on_brightandcontrast(int, void *) { for (int i = 0; i < adjMat.rows; ++i) { for (int j = 0; j < adjMat.cols; ++j) { for (int c = 0; c < 3; ++c) { adjMat.at<Vec3b>(i, j)[c] = saturate_cast<uchar>(srcImg.at<Vec3b>(i, j)[c] * contrast*0.01 + bright-150); //这里乘上0.01,减去150,为了使结果在合理的范围内 } } } imshow("亮度和对比度", adjMat); }
回调函数参数解释
参数一 滑动块的位置,由于设为全局变量,所以不管
参数二 调用时赋予的额外数据,无,不管
saturate_cast<uchar>(int)模板函数,如果参数不超过<>内类型的最大值,返回原值,超过的话返回<>内类型的最大值,这里最大值为255
main函数创建了一个显示窗口和两个滑动条