六、滚动条操作——调整图像亮度
亮度调整:在原来的图像基础上,对每个像素点值增加或减小,是图片整体亮度的增加或降低
项目最终效果:通过滚动条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;
}
项目结构如图所示:
运行效果如图所示: