六、滚动条操作——调整图像亮度

亮度调整:在原来的图像基础上,对每个像素点值增加或减小,是图片整体亮度的增加或降低

项目最终效果:通过滚动条trackbar来实现调整图片亮度和对比度的功能
我这里创建的项目为:track_bar_light

一、创建滚动条调整图像亮度——头文件

在项目的头文件中,右击添加新建项
在这里插入图片描述
创建用于滚动条调整图像亮度的头文件,我这边是track_bar.h
在这里插入图片描述
该头文件声明了一个TrackBar类(class TrackBar),该类下面声明一个函数(void track_bar(Mat& image))

track_bar.h头文件内容如下:

#pragma once
#include<opencv2/opencv.hpp>
using namespace cv;

class TrackBar {
	public:
		void track_bar(Mat&image);
};

二、创建滚动条调整图像亮度——函数实现

创建个文件,用于实现头文件中TrackBar类中的track_bar函数
我这个文件是:trackbar_finish.cpp

在这里插入图片描述
在这里插入图片描述
#include"track_bar.h",导入自定义的头文件
Mat hjj, result, src;
hjj负责每次改变像数值
result用于存放改变之后的图像
src原始图像

createTrackbar("subtract:","light_change",&init_light,max_value,on_track);
参数一:起个名称而已,用于滚动条显示的字符串
参数二:窗口名称
参数三:起始的位置
参数四:滚动条的最大值
参数五:自定义响应事件函数
在这里插入图片描述
事件响应函数on_track
hjj = Scalar(init_light, init_light, init_light);,自定义每次要改变的像素点值
subtract(src, hjj, result);,这里是对原始图像进行减法操作,对原始图像src实施每次减去hjj这个值,得到的结果为result

#include"track_bar.h"
#include <iostream>
#include <opencv2/opencv.hpp>

Mat hjj, result, src;
int max_value =50, init_light=5;

static void on_track(int, void*) {
	hjj = Scalar(init_light, init_light, init_light);
	subtract(src, hjj, result);
	imshow("light_change", result);
}

void TrackBar::track_bar(Mat& image) {
	namedWindow("light_change", WINDOW_AUTOSIZE);
	hjj = Mat::zeros(image.size(), image.type());
	result = Mat::zeros(image.size(), image.type());
	src = image;
	createTrackbar("subtract:","light_change",&init_light,max_value,on_track);
	on_track(5, 0);
}

三、创建滚动条调整图像亮度——主函数

同理,创建一个cpp文件,我这里以yy_main.cpp为例,作为程序执行入口,调用所实现的方法。

在这里插入图片描述
在这里插入图片描述

#include <opencv2/opencv.hpp>
#include <iostream>
#include "track_bar.h"

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
	Mat src = cv::imread("E:/C++_workspace/beyond.jpg", IMREAD_COLOR);

	if (src.empty()) {
		printf("load image is false...\n");
		return -1;
	}

	namedWindow("yanyu", WINDOW_FREERATIO);
	imshow("yanyu", src);

	TrackBar yy;
	yy.track_bar(src);

	waitKey(0);
	destroyAllWindows();

	return 0;
}

项目结构如图所示:
在这里插入图片描述
运行效果如图所示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

beyond谚语

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

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

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

打赏作者

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

抵扣说明:

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

余额充值