第七节 滑动操作调节对比度

优化上一节的程序



用户滑动时触发

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);

个人理解若有不对,欢迎指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值