Ubuntu系统VScode实现opencv(c++)滚动条实现对比度调整

在文章滚动条调整图片亮度-CSDN博客中,我们实现了亮度的调整,同时我也作出了一些参数的改进:

static void on_track_light(int light_ness,void* p)
{
    Mat image = *((Mat*)p);
    Mat dst;
    Mat m = Mat::zeros(image.size(),image.type());
    m = Scalar(light_ness,light_ness,light_ness);
    image.copyTo(dst);
    // dst = dst + Scalar(light_ness,light_ness,light_ness);
    // addWeighted(image,1,m,0,light_ness,dst);
    addWeighted(image,1,m,1,0,dst);
    imshow("adjust",dst);
}
createTrackbar("Light Value bar","adjust",&light_ness,max_light,on_track_light,(void*)(&image));

我们直接给回调函数image的地址,并在回调函数的定义中读取这个地址的图片,但是需要将void指针类型转换成Mat指针类型;这样就不需要在外面定义变量;同时也作出其他的改进;

首先,介绍一个函数addWeight()线性加权函数;

void addWeighted(
    InputArray src1, double alpha,
    InputArray src2, double beta,
    double gamma, OutputArray dst, int dtype = -1);

计算 dst = src1*α + src2*β + γ,一次完成加权相加与偏移。

实现亮度增加的两个途径:

1.dst = src1*1 + src2*1 + 0;src2可以是我们想加的亮度值:

static void on_track_light(int light_ness,void* p)
{
    Mat image = *((Mat*)p);
    Mat dst;
    Mat m = Mat::zeros(image.size(),image.type());
    m = Scalar(light_ness,light_ness,light_ness);
    addWeighted(image,1,m,1,0,dst);
    imshow("adjust",dst);
}

2.dst = src1*1 + src2*0 + γ;γ可以是我们想加的亮度值:

static void on_track_light(int light_ness,void* p)
{
    Mat image = *((Mat*)p);
    Mat dst;
    Mat m = Mat::zeros(image.size(),image.type());
    addWeighted(image,1,m,0,light_ness,dst);
    imshow("adjust",dst);
}

实现对比度:把对比度映射到 0.1–3.0:dst = src1*α;

static void on_track_Contrast(int Contrast_ness,void* p)//对比度
{
    Mat image = *((Mat*)p);
    Mat dst;
    double contrast = 0.1 + Contrast_ness * 2.9 / 100.0;
    addWeighted(image,contrast,0,0,0,dst);
    imshow("adjust",dst);
}

这里我们需要生成新的滑动值条;

void Demo::Tracking_Demo(Mat &image)
{
    namedWindow("adjust",WINDOW_FREERATIO);
    int max_light = 100;
    int light_ness =  50;
    int max_Contrast = 200;
    int Contrast_ness = 50;
    createTrackbar("Light Value bar","adjust",&light_ness,max_light,on_track_light,(void*)(&image));
    createTrackbar("Contrast Value bar","adjust",&Contrast_ness,max_Contrast,on_track_Contrast,(void*)(&image));
}

当然,也要对比度的最大值max_Contrast以及初始值Contrast_ness,同样Contrast_ness可作为调整值;运行代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值