优化上一节的程序
用户滑动时触发
static void on_track(int b, void* userdata)--int b参数轨迹条的值,随着用户拖动,这个值会变,在下面场景下会被强制转换成Mat*型。user图像的地址
{
Mat image = *((Mat*)userdata);--数值化给image
Mat dst = Mat::zeros(image.size(), image.type());
Mat m = Mat::zeros(image.size(), image.type());
m = Scalar(b, b, b);
subtract(image, m, dst);
imshow("亮度调整",dst);
}
void QUickdemo::tracking_bar_demo(Mat& image)
{
namedWindow("亮度调整", WINDOW_FREERATIO);
int light = 50;
int max_value = 100;
createTrackbar("Value Bar:", "亮度调整" ,& light, max_value, on_track,(void*)(&image))
static void on_track(int b, void* userdata)
{
Mat image = *((Mat*)userdata);
Mat dst = Mat::zeros(image.size(), image.type());
Mat m = Mat::zeros(image.size(), image.type());
m = Scalar(b, b, b);
subtract(image, m, dst);
imshow("亮度调整",dst);
}
void QUickdemo::tracking_bar_demo(Mat& image)
{
namedWindow("亮度调整", WINDOW_FREERATIO);
int light = 50;
int max_value = 100;
createTrackbar("Value Bar:", "亮度调整" ,& light, max_value, on_track,(void*)(&image));//创建轨迹条可以让用户通过拖动滑块的方式来调整整数值
on_track(50, &image);
}
on_track(50, &image);--手动调用一次回调函数,在初始状态下显示调整亮度后的图像,这里传入的亮度值为50和图像的地址。
}
新建一个函数
static void on_trast(int b, void* userdata)
{
Mat image = *((Mat*)userdata);
Mat dst = Mat::zeros(image.size(), image.type());
Mat m = Mat::zeros(image.size(), image.type());
double contrast = b / 100.0;
addWeighted(image, contrast, m, 0.0, 0, dst);
imshow("亮度调整", dst);
}
里面与刚刚不同的是添加了double contrast函数和addWeighted函数
addWeighted是 OpenCV 库中的一个函数,用于计算两个图像的加权和。
其函数原型如下:
void addWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst);
各个参数的含义如下:
• src1:第一个输入数组(图像)。
• alpha:第一个数组的权重。
• src2:第二个输入数组(图像)。
• beta:第二个数组的权重。
• gamma:加到加权和上的标量值。
• dst:输出数组,其大小和类型与输入数组相同。
上面程序将权重现在在了0-2之间目的是避免出现过暗或过量的情况,m的权重设定是为了不希望m影响image
上面有可能会报lock错误,完善一下代码
createTrackbar("Value Bar:", "亮度调整" ,& light, max_value, on_lightness,(void*)(&image));
imshow("亮度调整", image);
createTrackbar("Contrast Bar:", "亮度调整", & contrast_value, 100 , on_trast, (void*)(&image));
imshow("亮度调整", image);//创建轨迹条可以让用户通过拖动滑块的方式来调整整数值
on_lightness(50, &image);