Opencv -- 006滚动条操作演示 - 调整图像亮度

通过滚动条来调整图像亮度

#include <iostream>
#include "06_opencv_mat.h"

using namespace std;

Mat src,dst,temp;
int lightness = 50; //初始值设置为50
uchar flag = 2;

static void on_track(int pos, void* userdata)
{
	if (lightness > 50 && lightness <= 100)
	{
		flag = 1;
		lightness -= 50;
	}
	else if(lightness >= 0 && lightness < 50)
	{
		flag = 0;
		lightness = 50 - lightness;
	}
	else
	{
		flag = 2;
	}

	switch (flag)
	{
		case 0:{
			temp = Scalar(lightness, lightness, lightness);
			subtract(src, temp, dst);
			break; 
		}
		case 1: {
			temp = Scalar(lightness, lightness, lightness);
			add(src, temp, dst);
			break;
		}
		case 2: {
			temp = Scalar(0, 0, 0);
			add(src, temp, dst);
			break;
		}
	}
	
	imshow("亮度调整", dst);
}

void QuickDemo::tracking_bar_demo(Mat &image)
{
	namedWindow("亮度调整", WINDOW_AUTOSIZE);

	//我希望滚动条的调整范围在 0 - 100 之间
	//不用设置最小值,默认就是0 - 100
	int max_value = 100;
	src  = image;
	temp = Mat::zeros(image.size(), image.type());
	dst  = Mat::zeros(image.size(),image.type());
	
	//参数1 - 给这个滚动条设置一个名字
	//参数2 - 滚动条显示在哪个窗体
	//参数3 - 通过哪个值来控制,需要传地址过去
	//参数4 - 调整的范围是多少,即最大值是多少,最小值为0
	//参数5 - 是一个回调函数, TrackbarCallback onChange = 0,默认为NULL(0),
	// typedef void (*TrackbarCallback)(int pos, void* userdata);
	// 当我们滑动滚动条时,就会产生一个事件(Trackbar Change),系统会捕捉这个事件,
	// 然后调用我们写的回调函数TrackbarCallback
	//参数6 - void* userdata = 0,是否需要它携带一个外带的数据,这个数据可以是你自己定义的,由void*修饰
	createTrackbar("Value Bar:", "亮度调整", &lightness, max_value, on_track);
	on_track(50,0);
}

运行结果如下:
向左为亮度减,向右为亮度加。
在这里插入图片描述
改进

#include <iostream>
#include "06_opencv_mat.h"

using namespace std;

static void on_track(int pos, void* userdata)
{
	Mat src =  *((Mat*)userdata);
	Mat dst =  Mat::zeros(src.size(), src.type());
	Mat temp = Mat::zeros(src.size(), src.type());
	temp = Scalar(pos, pos, pos);
	subtract(src,temp,dst);
	imshow("亮度调整", dst);
}

void QuickDemo::tracking_bar_demo(Mat &image)
{
	namedWindow("亮度调整", WINDOW_AUTOSIZE);

	//我希望滚动条的调整范围在 0 - 100 之间
	//不用设置最小值,默认就是0 - 100
	int lightness = 0; //初始值设置为0
	int max_value = 100;
	
	//参数1 - 给这个滚动条设置一个名字
	//参数2 - 滚动条显示在哪个窗体
	//参数3 - 通过哪个值来控制,需要传地址过去
	//参数4 - 调整的范围是多少,即最大值是多少,最小值为0
	//参数5 - 是一个回调函数, TrackbarCallback onChange = 0,默认为NULL(0),
	// typedef void (*TrackbarCallback)(int pos, void* userdata);
	// 当我们滑动滚动条时,就会产生一个事件(Trackbar Change),系统会捕捉这个事件,
	// 然后调用我们写的回调函数TrackbarCallback
	//参数6 - void* userdata = 0,是否需要它携带一个外带的数据,这个数据可以是你自己定义的,由void*修饰
	createTrackbar("Value Bar:", "亮度调整", &lightness, max_value, on_track,(void*)(&image));
	on_track(lightness,&image);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xuechanba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值