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

七、滚动条操作——调整图像对比度

对比度调整:是在原来图像基础上进行相应的公式调整,是类似乘法操作,本身像数值越大,对比度增加之后其与低像素点值差距越大,导致对比增强

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

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

在项目的头文件中,右击添加新建项
在这里插入图片描述

创建用于滚动条调整图像亮度的头文件,我这边是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("contrast:", "contrast_change", &init_contrast, max_value, on_contrast, (void*)(&image));
参数一:起个名称而已,用于滚动条显示的字符串
参数二:窗口名称
参数三:起始的位置
参数四:滚动条的最大值
参数五:自定义响应事件函数
参数六:传参
在这里插入图片描述

事件响应函数on_contrast
hjj = Scalar(init_light, init_light, init_light);,自定义每次要改变的像素点值
addWeighted(src, alpha, hjj, 0.0, 0, result);
公式:result = src1 * alpha + src2 * beta + gamma
其中src1为原始图src,alpha为一个double类型数据,src2为另一个图像数据这里为hjj全零的同规格图像,beta为0.0,gamma为0,最终的结果为result

基于博文:六、滚动条操作——调整图像亮度的改进版

改进版,传参实现

#include"track_bar.h"
#include <iostream>
#include <opencv2/opencv.hpp>Mat hjj, result, src;
int max_value = 500, init_contrast = 150;static void on_contrast(int init_light, void* userdata) {double alpha = init_light / 100.0;Mat src = *((Mat*)userdata);hjj = Scalar(init_light, init_light, init_light);addWeighted(src, alpha, hjj, 0.0, 0, result);imshow("contrast_change", result);}void TrackBar::track_bar(Mat& image) {namedWindow("contrast_change", WINDOW_AUTOSIZE);hjj = Mat::zeros(image.size(), image.type());result = Mat::zeros(image.size(), image.type());src = image;createTrackbar("contrast:", "contrast_change", &init_contrast, max_value, on_contrast, (void*)(&image));on_contrast(150, &image);
}

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

同理,创建一个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.lryc.cn/news/298350.html

相关文章:

  • 免费生成ios证书的方法(无需mac电脑)
  • gtkmm4 应用程序使用 CSS 样式
  • 科研绘图-半小提琴图-
  • 机器学习 | 深入集成学习的精髓及实战技巧挑战
  • SNMP(简单网络管理协议)介绍
  • Spring中常见的设计模式
  • 【MySQL】——数值函数的学习
  • LLMs模型选择,LLMs复读机问题,LLMs长文本处理方案
  • LeetCode.144. 二叉树的前序遍历
  • Redis复制
  • C++入门学习(二十七)跳转语句—break语句
  • Spark安装(Yarn模式)
  • 1.4 Binance_interface API U本位合约行情
  • 单片机学习笔记---AT24C02(I2C总线)
  • c++恶魔轮盘制造第1期输赢
  • 60-JS-Ajax
  • C# Avalonia 折线图
  • Vue3中Setup概述和使用(三)
  • hexo 博客搭建以及踩雷总结
  • WordPress后台编辑个人资料页面直接修改用户名插件Change Username
  • ssm+vue的医药垃圾分类管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。
  • LLM大模型基本概念,及其相关问题汇总(1)
  • 【已解决】pt文件转onnx后再转rknn时得到推理图片出现大量锚框变花屏
  • DevOps文章之 操作手册用户使用说明书
  • 【RT-DETR进阶实战】利用RT-DETR进行视频划定区域目标统计计数
  • 2.11学习总结
  • 以谷歌浏览器为例 讲述 JavaScript 断点调试操作用法
  • Vue前端框架--Vue工程项目问题总结{脚手架 Vue-cli}
  • Unity2D 学习笔记 0.Unity需要记住的常用知识
  • vue3-应用规模化-单文件组件