Qt图像处理技术三:图片亮度与对比度处理

2023-11-04

Qt图像处理技术三:图片亮度和对比度处理

github地址

实战应用项目:
github :https://github.com/dependon/simple-image-filter //纯qt图像处理项目

效果图

在这里插入图片描述

公式

value都是取0-300
red=0.01对比值red-150+曝光值;
green=0.01对比值green-150+曝光值;
blue=0.01对比值blue-150+曝光值;

代码(容易理解)

QImage lightContrastImage(const QImage &img,  int light, int Contrast)
{
    QImage imgCopy = QImage(img);

    for (int y = 0; y < img.height(); y++) {
        for (int x = 0; x < img.width(); x++) {
            float r = light * 0.01 * qRed(img.pixel(x, y)) - 150 + Contrast;
            float g = light * 0.01 * qGreen(img.pixel(x, y)) - 150 + Contrast;
            float b = light * 0.01 * qBlue(img.pixel(x, y)) - 150 + Contrast;
            r = Bound(0, r, 255);
            g = Bound(0, g, 255);
            b = Bound(0, b, 255);
            imgCopy.setPixel(x, y, qRgb(r, g, b));
        }

    }
    return imgCopy;
}

源码(相对上述源码快5-20倍,因为绕过了Qt每个取点的检测)

QImage QImageAPI::lightContrastImage(const QImage &img,  int light, int Contrast)
{
    QImage imgCopy;
    if (img.format() != QImage::Format_RGB888) {
        imgCopy = QImage(img).convertToFormat(QImage::Format_RGB888);
    } else {
        imgCopy = QImage(img);
    }
    uint8_t *rgb = imgCopy.bits();
    if (nullptr == rgb) {
        return QImage();
    }
    int r;
    int g;
    int b;
    int size = img.width() * img.height();
    for (int i = 0; i < size ; i++) {
        r = light * 0.01 * rgb[i * 3] - 150 + Contrast;
        g = light * 0.01 * rgb[i * 3 + 1] - 150 + Contrast;
        b = light * 0.01 * rgb[i * 3 + 2]  - 150 + Contrast;
        r = Bound(0, r, 255);
        g = Bound(0, g, 255);
        b = Bound(0, b, 255);
        rgb[i * 3] = r;
        rgb[i * 3 + 1] = g;
        rgb[i * 3 + 2] = b;
    }

    return imgCopy;
}

联系我

liuminghang0821@qq.com
有问必答,期待你的指教肯小星星

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt图像处理技术三:图片亮度与对比度处理 的相关文章

  • 使用 C 的另一个结构内的灵活长度结构数组

    你好 我正在尝试使用 C 来实现一个简单的结构 2 个盒子 每个盒子包含不同数量的颗粒 main 中传递的粒子的确切数量 我写了以下代码 typedef struct Particle float x float y float vx fl
  • 字符串/分段错误

    Program to calculate trip and plan flights define TRIP 6 define NAMEMAX 40 define DEST 1 include
  • 二叉树和快速排序?

    我有一个家庭作业 内容如下 别生气 担心 我是not请你帮我做作业 编写一个程序 通过使用二分查找的快速排序方法对一组数字进行排序 树 推荐的实现是使用递归算法 这是什么意思 到目前为止 这是我的解释 正如我在下面解释的那样 我认为两者都有
  • 有关shared_ptr的竞态条件示例

    为什么没有竞争条件代码片段 https godbolt org z nEYPYqdqK below include
  • 图片框、双击和单击事件

    我有一个奇怪的问题 我有一个图片框双击事件以及单击事件 问题是即使我双击该控件 也会引发单击事件 如果我禁用单击事件 则双击事件正在工作 这个问题已经在这里讨论过 https stackoverflow com questions 1830
  • 为什么 xcode IDE 认为 `friend` 是保留字

    我一直在开发一个个人项目 并在我创建的新类中包含以下代码 property readonly getter isFriend BOOL friend 它似乎没有任何问题 当我构建它时 它可以编译得很好 但是当我们在xcode IDE看起来像
  • C++:避免​​在重载中将字符串自动转换为布尔值

    我想创建一组方法 这些方法将根据其类型输出具有特殊格式的值 当我这样做时 到目前为止看起来还不错 static void printValue std ostringstream out int value out lt lt value
  • 大小为 k 的非连续子序列的最大值的最小值

    在开始之前 我希望这个问题不是重复的 我发现了几个类似的问题 但它们似乎都没有描述完全相同的问题 但如果它是重复的 我会很高兴看到一个解决方案 即使它与我的算法不同 我一直在尝试回答这个问题 https stackoverflow com
  • 向客户端发送状态码 500 时页面未呈现

    我有一个页面 通用处理程序 我想在该页面上向客户端返回状态代码 500 以指示出现问题 我这样做 Response StatusCode 500 Response StatusDescription Internal Server Erro
  • 对列表中的一系列整数求和

    假设我有一个这样的列表 List
  • 批量插入,asp.net

    我需要获取与会员相对应的 ID 号列表 在任何给定时间处理的数量可能在 10 到 10 000 之间 我可以毫无问题地收集数据 解析数据并将其加载到 DataTable 或任何内容 C 中 但我想在数据库中执行一些操作 将所有这些数据插入表
  • 为什么 C# 中的命名空间允许循环依赖?

    在 c 中 您可以在文件 a cs 其命名空间为 MyApp A 中拥有一条语句 using MyApp B 而文件 b cs 其名称空间为 MyApp B 已经包含该语句 using MyApp A 如果类似的依赖关系存在于不同的 dll
  • 如何处理文件名中的空格

    我正在尝试迭代本地目录中的文件 foreach string name in Directory GetFileSystemEntries path FileAttrtibutes att File GetAttributes name 文
  • 括号内声明的对象的范围

    如果我声明一个这样的对象 void main myclass objectA anotherclass true true 0 即 我通过直接调用后者的构造函数来创建一个 objectA 和另一个对象 anotherclass anothe
  • 模板类中模板方法专门化的 clang 自动返回类型错误?

    试图理解另一个问题 https stackoverflow com questions 38054055 clang fails to compile template function with auto return type insi
  • 为什么使用 .AsEnumerable() 而不是转换为 IEnumerable

    扩展方法之一IEnumerable
  • 用 std::generate_n 填充 std::map

    我想填写一个std map using std generate n但无法让它发挥作用 我尝试过的是这样的事情 unsigned number of pairs 5 std map
  • C# 中的 mshtml.HTMLDocumentClass

    在 C 中 我设法从 InternetExplorer 对象获取整个 HTMLDocumentClass 导航到某个 URL 然而 在 Visual Studio 2008 的调试模式下 该特定 URL 的 HTMLDocumentClas
  • C# 使用 .Equals() 比较两个 double

    我使用 ReShaper 当我用 比较两个双精度值时 它建议我应该使用 Math 具有公差的 ABS 方法 看 https www jetbrains com help resharper 2016 2 CompareOfFloatsByE
  • 将二进制长字符串转换为十六进制 C#

    我正在寻找一种将长二进制字符串转换为十六进制字符串的方法 二进制字符串看起来像这样 0110011010010111001001110101011100110100001101101000011001010110001101101011 我

随机推荐

  • (css样式穿透详解)::v-deep的使用

    目录 背景 使用 1 当项目中使用的 css 原生样式 需要使用 gt gt gt 深度选择器来修改 外用第三方组件的样式 2 当项目中使用的 css 扩展语言是 less 需要使用 deep 或者 v deep 深度选择器来修改 外用第三
  • TypeScript超详细入门教程(上)

    TypeScript超详细入门教程 上 01 开篇词 Hello TypeScript 01 开篇词 Hello TypeScript 更新时间 2019 10 30 13 49 46 既然我已经踏上这条道路 那么 任何东西都不应妨碍我沿着
  • ios申请真机调试( xcode 5)详细解析

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 已经有开发证书的直接跳过第一步 第一步 申请 开发证书 进入苹果开发者99美元账号 选择 Certificates Identifiers Profiles 关于 Cert
  • BTC-协议

    防范 double spending attack Distribute consensus distributed hash table 分布式共识 FLP impossibility result 在一个异步的系统里 网络时延没有上限
  • cython优化代码过程问题及解决总结

    1 同样cdef的矩阵还是在Python平台 还是黄色 源 问题 解决1 2 3 1 加上修饰符 cython boundscheck False cython wraparound False 2 数组索引方式 注意这里nodePot0是
  • avue 表单远程搜索、模糊查询

    关于avue的模糊下拉 直接上代码 computed option return emptyBtn false submitBtn false menuSpan 8 menuBtn false column label 经销商名称 labe
  • 编译原理------词法分析器C/C++代码实现

    一 实验目的 设计 编制并调试一个词法分析程序 加深对词法分析原理的理解 二 实验内容 2 1 待分析的简单的词法 1 关键字 begin if then while do end 所有的关键字都是小写 2 运算符和界符 lt lt lt
  • 剑指 Offer 11. 旋转数组的最小数字、12.矩阵中的路径

    剑指 Offer 11 12 旋转数组的最小数字 思路 矩阵中的路径 回溯法 旋转数组的最小数字 旋转数组的最小数字 思路 就是找旋转点 二分查找 去除两端的元素 package swordPointingToTheOffer public
  • java实现敏感字过滤工具类

    实现敏感字的过滤思路 1 读取敏感词库 2 确认字符串中是否有敏感词库中的敏感词 以下提供判断是否有敏感词的方法boolean checkSenstiveWord 和将敏感词转换为 字符的方法String filterInfoAfter 工
  • 如何给Winform 的Panel控件添加滚动条

    真是太笨了 刚想起来 Panel控件还有一个AutoScoll属性 直接修改为true即可 添加Panel控件的如下两个事件即可 当然 只是添加的竖向滚动条 横向滚动条只需把VerticalScroll改为HorizontalScroll即
  • Promise学习笔记

    目录大纲 一 初识Promise 1 Promise是什么 2 什么时候使用Promise 3 Promise的基本用法 二 Promise的实例方法 1 then方法 2 使用Promise解决回调地狱问题 3 catch 4 了解fin
  • Linux查看进程的内存占用情况

    1 top top命令是Linux下常用的性能分析工具 能够实时显示系统中各个进程的资源占用状况 类似于Windows的任务管理器 内容解释 PID 进程的ID USER 进程所有者 PR 进程的优先级别 越小越优先被执行 NInice 值
  • C++基础——函数重载

    目录 一 函数 重载的三种形式 1 参数个数不同的重载函数 2 类型上的不同重载函数 3 类型顺序上的不同重载函数 二 函数重载 缺省参数 返回值不同 能不能构成函数重载 重载 重新赋予意义 可以认为是一词多义 例如 算账 基本义是计算账目
  • 【黑科技】:AI 图片无损放大工具 果核图片放大

    分享两款图片AI放大工具 果核图片放大 和 AI Lossless Zoomer 两者并没有太大的区别 两款应用使用的算法都是实用的来自腾讯ARC实验室的Real ESRGAN 目前这个模型主要来源人像 所以对人物的处理效果会更加明显 图片
  • matlab如何残差分析图,利用matlab绘制类似拟合、残差图(需手工合并)

    对股票软件比较熟悉的同学都知道经常会看到这样的界面 上图显示的是股价的运行 下图显示的是一些技术指标 坐标轴可以不同向 因而考虑用matlab绘制如上面所示的图形 function fit plot x y real y fit 绘制拟合
  • ftp文件在服务器的什么位置,ftp文件服务器上传后的文件在哪

    ftp文件服务器上传后的文件在哪 内容精选 换一换 从本地上传日志文件 是指从浏览器所在机器选择日志文件并上传 目前只支持选择 log的日志文件 如果日志文件中包含其他格式文件 则导入时会提示格式错误 如图2所示 单击Upload 则只会上
  • 微信小程序,图片mode属性详解

  • linux:Ubuntu完全卸载与安装Mysql

    参考 Ubuntu完全卸载与安装Mysql ubuntu重新安装mysql 墨1024的博客 CSDN博客
  • 使用Python,OpenCV从图像中删除轮廓

    使用Python OpenCV从图像中删除轮廓 1 效果图 2 步骤 3 源码 4 参考 1 使用Python OpenCV计算轮廓的中心并标记 2 使用Python OpenCV检测轮廓的形状并标记 3 使用颜色通道统计信息来标记形状的实
  • Qt图像处理技术三:图片亮度与对比度处理

    Qt图像处理技术三 图片亮度和对比度处理 github地址 实战应用项目 github https github com dependon simple image filter 纯qt图像处理项目 效果图 公式 value都是取0 300