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

C++ opencv RGB三通道提升亮度

#include <iostream>
#include <iomanip>
#include<opencv2//opencv.hpp>
using namespace std;
using namespace cv;

//函数adjustBrightness用于图片增加亮度
void adjustBrightness(cv::Mat& image, int targetBrightness) {
    // 获取图像的通道数
    int channels = image.channels();
    // 计算调整亮度的因子
    float factor = 1.0f;
    if (targetBrightness > 0) {
        factor = static_cast<float>(targetBrightness) / 255.0f;
    }
    else if (targetBrightness < 0) {
        factor = 255.0f / static_cast<float>(255 - std::abs(targetBrightness));
    }
    // 遍历图像的每个像素
    for (int i = 0; i < image.rows; ++i) {
        for (int j = 0; j < image.cols; ++j) {
            // 获取像素值
            cv::Vec3b& pixel = image.at<cv::Vec3b>(i, j);

            // 调整亮度
            for (int c = 0; c < channels; ++c) {
                if (targetBrightness > 0) {
                    pixel[c] = cv::saturate_cast<uchar>(pixel[c] * factor);
                }
                else if (targetBrightness < 0) {
                    pixel[c] = cv::saturate_cast<uchar>((pixel[c] - 255) * factor + 255);
                }
            }
        }
    }
}
void saveimage(std::string file, std::string savefile, int targetBrightness = 400) {
    cv::Mat img = imread(file);
    adjustBrightness(img, targetBrightness);
    imwrite(savefile, img);
}
int main() {
    saveimage("C:/Users/lenovo/Desktop/aa/T026_26.jpg",
        "C:/Users/lenovo/Desktop/aa/aa.jpg", 800);
}
 

相关文章:

  • Linux 一键部署TeamCity
  • 我的创作纪念日2048
  • c# 使用OpenCV
  • 【K8s】1# 使用kuboard-spray安装K8s集群
  • Java代码审计Mybatis注入文件上传下载读取(非常详细!!)
  • FFmpeg实现rtp推流
  • 黑豹程序员-安装docker-ce
  • 使用 Taro 开发鸿蒙原生应用 —— 探秘适配鸿蒙 ArkTS 的工作原理
  • linux搭建gitlab
  • 漫谈UNIX、Linux、UNIX-Like
  • JMeter常见配置及常见问题修改
  • 教你如何完美录制电脑端游戏视频
  • 【SpringMVC】SpringMVC的请求与响应
  • 智能优化算法应用:基于非洲秃鹫算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • Python:正则表达式---贪婪匹配
  • [译]前端离线指南(上)
  • 【Amaple教程】5. 插件
  • Bytom交易说明(账户管理模式)
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Iterator 和 for...of 循环
  • Java IO学习笔记一
  • Java读取Properties文件的六种方法
  • leetcode386. Lexicographical Numbers
  • mysql 数据库四种事务隔离级别
  • Node 版本管理
  • PAT A1050
  • Python学习笔记 字符串拼接
  • 复习Javascript专题(四):js中的深浅拷贝
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 后端_MYSQL
  • 盘点那些不知名却常用的 Git 操作
  • 如何使用 JavaScript 解析 URL
  • 我的业余项目总结
  • 我有几个粽子,和一个故事
  • 详解移动APP与web APP的区别
  • 优化 Vue 项目编译文件大小
  • ​人工智能书单(数学基础篇)
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • (13):Silverlight 2 数据与通信之WebRequest
  • (9)目标检测_SSD的原理
  • (C语言)fgets与fputs函数详解
  • (SpringBoot)第七章:SpringBoot日志文件
  • (八)Spring源码解析:Spring MVC
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)http协议
  • (转)编辑寄语:因为爱心,所以美丽
  • ***通过什么方式***网吧
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET Framework 服务实现监控可观测性最佳实践
  • .net 验证控件和javaScript的冲突问题
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NET序列化 serializable,反序列化