当前位置: 首页 > article >正文

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

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

项目最终效果:通过滚动条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;
}

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


http://www.kler.cn/a/233757.html

相关文章:

  • 应用于新能源汽车NCV4275CDT50RKG车规级LDO线性电压调节器芯片
  • INQUIRE:一个包含五百万张自然世界图像,涵盖10,000个不同物种的专为专家级文本到图像检索任务设计的新型基准数据集。
  • 若依笔记(八):芋道的Docker容器化部署
  • 如何用C#和Aspose.PDF实现PDF转Word工具
  • 阿里巴巴通义灵码推出Lingma SWE-GPT:开源模型的性能新标杆
  • [Docker#8] 容器配置 | Mysql | Redis | C++ | 资源控制 | 命令对比
  • 《Docker极简教程》--Docker环境的搭建--在Linux上搭建Docker环境
  • 架设游戏服务器租用价格?腾讯云和阿里云价格对比
  • 跟着cherno手搓游戏引擎【23】项目维护、2D引擎之前的一些准备
  • 小程序配置服务器域名流程指南
  • 机器学习2---逻辑回归(基础准备)
  • 新概念英语第二册(62)
  • vim常用命令以及配置文件
  • 物联网中基于WIFI的室内温度检测系统设计
  • Blender 的重拓扑功能中的参数,
  • c++中的模板(1) -- 什么是模板
  • Kotlin和Java 单例模式
  • 【Linux】Shell编程
  • 【ASP.NET Core 基础知识】--部署和维护--日志记录和错误处理
  • C++中类的6个默认成员函数【构造函数】 【析构函数】
  • Java串口通信技术探究3:RXTX库线程 优化系统性能的SerialPortEventListener类
  • k8s-常用工作负载控制器(更高级管理Pod)
  • 基于 SpringBoot 和 Vue.js 的权限管理系统部署教程
  • 备战蓝桥杯---动态规划之背包问题引入
  • 基于opencv-python模板匹配的银行卡号识别(附源码)
  • 基于tomcat运行jenkins常见的报错处理