06 滚动条操作1.0 - 调整图像亮度

06 滚动条操作1.0 - 调整图像亮度

opencv知识点:

  • 创建滚动条 - createTrackbar()
  • 处理滚动条事件的函数 - TrackbarCallback()

本课所解决的问题:

  • 如何创建滚动条?
  • 如何通过滚动条进行亮度调整?

1.滚动条的创建

上一课中,我们调整亮度只能一次一次的去调整,现在我们来试一下通过滚动条调整亮度。

OpenCV中,我们要想在图像上通过滚动条调整亮度,要用到两个API

  • createTrackbar

  • TrackbarCallback(用户自写)

createTrackbar
	创建滚动条
		共6个参数
			第1个参数 滚动条名称
			第2个参数 窗口名称
			第3个参数 初始的位置
			第4个参数 最大位置(最小位置始终为0)
			第5个参数 处理轨迹栏事件类型的回调函数
					(opencv中这里默认是onChange = 0,实际应用中我们要自己进行函数定义及实现)
			第6个参数 userdata 传递给回调函数的用户数据(任何我们想传的,比如图像)

TrackbarCallback类型的函数
	共2个参数
		第1个参数 指定轨迹栏的当前位置
		第2个参数 void*类型的可选传入数据

2.通过滚动条调整亮度

这里的代码只是初步的实现,并没有充分利用creatTrackbar的6个参数
同时部分地方也不符合面向对象的编程,所以我们在下一课进行了代码优化

程序

quickopencv.h

//函数定义
void tracking_bar_demo(Mat& image);

quickdemo.cpp

#include "quickopencv.h"
#include <opencv2/dnn.hpp>

using namespace cv;
using namespace std;


//函数实现
Mat src, dst, m;
int lightness;

static void on_track(int, void*) {

	m = Scalar(lightness, lightness, lightness);
	add(src, m, dst);
	//subtract(src, m, dst);
	imshow("亮度调整", dst);

}

void QuickDemo::tracking_bar_demo(Mat& image) {

	src = image;
	dst = Mat::zeros(image.size(), image.type());
	m = Mat::zeros(image.size(), image.type());
	namedWindow("亮度调整", WINDOW_AUTOSIZE);

	int max_value = 100;
	lightness = 50;

	createTrackbar("Value Bar:", "亮度调整", &lightness, max_value, on_track);
	
	//on_track(lightness, 0);
    /*
	课程中的这一句代码,是多此一举,这是一个回调函数不需要我们手动调用
	这个lightness在createTrackbar中就已经传入了,这里没必要再去调用传入
	*/

}

提高亮度:

提高亮度
add(src, m, dst);

10b263968c851652c73cbc531ffa957

降低亮度:

降低亮度
subtract(src, m, dst);

1226d6d0bbe3970f3f77a83ff0d895f

本课所用API查阅

creatTrackbar()

TrackbarCallback()

posted @ 2023-01-12 14:09  L707  阅读(145)  评论(0编辑  收藏  举报