使用 C++ 调整位图图像亮度/对比度

2023-12-19

使用 C++ 调整图像亮度/对比度,无需使用任何其他 3rd 方库或依赖项


图像亮度为here https://web.archive.org/web/20091229041814/http://www.kweii.com/site/color_theory/2007_LV/BrightnessCalculation.pdf- 使用 RGB 值的平均值并移动它们。

对比是here https://web.archive.org/web/20140825114946/http://bobpowell.net/image_contrast.aspx也可以使用其他语言的解决方案。


编辑以防上述链接失效:

下面 Jerry Coffin 给出的答案涵盖了相同的主题,并且包含仍然有效的链接。

但是,要调整亮度,您需要为图像的 R、G、B 字段添加一个常量值。确保使用饱和数学 - 不允许值低于 0 或高于位深度允许的最大值(24 位颜色为 8 位)

RGB_struct color = GetPixelColor(x, y);
size_t newRed   = truncate(color.red   + brightAdjust);
size_t newGreen = truncate(color.green + brightAdjust);
size_t newBlue  = truncate(color.blue  + brightAdjust);

作为对比,我已经采取并稍微修改了代码这个网站 http://www.dfstudios.co.uk/articles/programming/image-programming-algorithms/image-processing-algorithms-part-5-contrast-adjustment/:

float factor = (259.0 * (contrast + 255.0)) / (255.0 * (259.0 - contrast));
RGB_struct color = GetPixelColor(x, y);
size_t newRed   = truncate((size_t)(factor * (color.red   - 128) + 128));
size_t newGreen = truncate((size_t)(factor * (color.green - 128) + 128));
size_t newBlue  = truncate((size_t)(factor * (color.blue  - 128) + 128));

Where truncate(int value)确保 8 位颜色的值保持在 0 到 255 之间。请注意,许多 CPU 具有在单个周期内完成此操作的内在功能。

size_t truncate(size_t value)
{
    if(value < 0) return 0;
    if(value > 255) return 255;

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

使用 C++ 调整位图图像亮度/对比度 的相关文章

  • asp.net 文本框文本模式数字,仅允许数字

    我只是想知道 ASP NET 中是否有一种方法只允许文本框中的数字textmode number 当我使用这个时
  • C#动态支持吗?

    看完之后这个帖子 https stackoverflow com questions 2674906 when should one use dynamic keyword in c sharp 4 0k和链接 我还有 2 个问题 问题 1
  • 向 ExpandoObject 添加方法时,“关键字 'this' 在静态属性、静态方法或静态字段初始值设定项中无效”

    我尝试向 ExpandoObject 添加一个动态方法 该方法将返回属性 动态添加 给它 但它总是给我错误 我在这里做错了什么吗 using System using System Collections Generic using Sys
  • 为什么要序列化对象需要 Serialized 属性

    根据我的理解 SerializedAttribute 不提供编译时检查 因为它都是在运行时完成的 如果是这样 那么为什么需要将类标记为可序列化呢 难道序列化器不能尝试序列化一个对象然后失败吗 这不就是它现在所做的吗 当某些东西被标记时 它会
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • 构造函数中显式关键字的使用

    我试图了解 C 中显式关键字的用法 并查看了这个问题C 中的explicit关键字是什么意思 https stackoverflow com questions 121162 但是 那里列出的示例 实际上是前两个答案 对于用法并不是很清楚
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • 从多个类访问串行端口

    我正在尝试使用串行端口在 arduino 和 C 程序之间进行通信 我对 C 编程有点陌生 该程序有多种用户控制形式 每一个都需要访问串口来发送数据 我需要做的就是从每个类的主窗体中写入串行端口 我了解如何设置和写入串行端口 这是我的 Fo
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • ASP MVC:服务应该返回 IQueryable 的吗?

    你怎么认为 你的 DAO 应该返回一个 IQueryable 以便在你的控制器中使用它吗 不 您的控制器根本不应该处理任何复杂的逻辑 保持苗条身材 模型 而不是 DAO 应该将控制器返回给视图所需的所有内容 我认为在控制器类中看到查询 甚至
  • IronPython:没有名为 json 的模块

    我安装了 IronPython 我的 python 文件如下所示 import sys print sys version import json 运行它的代码 var p Python CreateEngine var scope p C
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • 通过 NHibernate 进行查询,无需 N+1 - 包含示例

    我有一个 N 1 问题 我不知道如何解决它 可以在这个问题的底部找到完全可重复的样本 因此 如果您愿意 请创建数据库 设置 NUnit 测试和所有附带的类 并尝试在本地消除 N 1 这是我遇到的真实问题的匿名版本 众所周知 这段代码对于帮助
  • 当模板类不包含可用的成员函数时,如何在编译时验证模板参数?

    我有以下模板struct template
  • 为什么拆箱枚举会产生奇怪的结果?

    考虑以下 Object box 5 int int int box int 5 int nullableInt box as int nullableInt 5 StringComparison enum StringComparison
  • 转到定义:“无法导航到插入符号下的符号。”

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我今天突然开始在我的项目中遇到一个问题 单击 转到定义 会出现一个奇怪的错误 无法导航到
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • 实例化 Microsoft.Office.Interop.Excel.Application 对象时出现错误:800700c1

    实例化 Microsoft Office Interop Excel Application 以从 winforms 应用程序生成 Excel 时 出现以下错误 这之前是有效的 但突然间它停止工作了 尽管代码和 Excel 版本没有变化 我
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop

随机推荐

  • Android Studio:如何创建在 Jenkins 上使用的 build.gradle 文件?

    我是 gradle 新手 正在尝试弄清楚如何在我们的 Jenkins 构建机器上进行设置 我们的应用程序在 Android Studio 中完美构建 但它永远不会生成 build gradle 文件 我相信我需要该文件才能在 Jenkins
  • Docker 镜像层:`ADD file: in /` 是什么意思?

    在 Docker Hub 镜像中有命令列表为每个运行图像层 这是一个 golangexample https hub docker com layers golang library golang 1 15 2 images sha256
  • 如何在 Objective-C 中使用运算符 < 或 > 比较对象?

    如何比较 Objective C 中自定义类的两个对象 我尝试超载 NSComparisonResult compare id other 方法 如果我手动调用该方法 这非常有用 if obj1 compare obj2 NSOrdered
  • 根据对角线对 numpy 矩阵进行排序

    我有一个矩阵 对角线上应该有一些 但列混淆了 但我不知道如何在没有明显的 for 循环的情况下有效地交换行以获得对角线上的统一 我什至不确定我会传递什么键来排序 有什么建议么 您可以使用 numpy 的argmax http docs sc
  • 将 std::string 转换为 QString

    我有一个std string content我知道包含 UTF 8 数据 我想将其转换为QString http doc qt io qt 4 8 qstring html 我该如何做到这一点 避免 Qt 中的 from ASCII 转换
  • python中将字符串转换为树结构

    我在 python 中有一个如下形式的字符串 line a line b line ba line bb line bba line bc line c line ca line caa line d 你可以明白这个想法 它实际上采用与 p
  • Delphi / SuperObject - 访问子节点

    我的服务器有以下 JSON userid 12 username TestChar logged yes status Premium User areas SERVICEAREA XX1 id 1 area SERVICEAREA XX1
  • 在 Perl 中,如何打印哈希中最大值对应的键?

    如何仅打印哈希的第一个键和元素 我已经有一个排序的哈希 但我只想打印第一个键和相应的值 谢谢 感谢大家 最后我将键和值推送到两个不同的 array 并打印每个数组的元素 0 它可以工作 哈希值具有无序的键 所以 不存在这样的密钥第一把钥匙在
  • 如何从 Emacs 运行 iex?

    当我使用 Emacs 中的 elixir mode iex 运行 iex 时 我不断收到此警告 Warning could not run smart terminal falling back to dumb one 我认为这只是意味着我
  • zmq:多线程可以以简单的 PUSH-PULL 模式进行 PUSH

    我有两个进程 producer它通过推送消息ZMQ http www zeromq org to a consumer以简单的 拉 推 点对点模式 生产者有几个内部线程send 通过 zmq 但是 0MQ 的文档建议不要在线程之间共享套接字
  • 如何从 JAX-WS Web 服务中访问 ServletContext?

    我想通过将对象存储为 Servlet 上下文属性来在 Servlet 和 Web 服务 JAX WS 之间共享该对象 但是如何从 Web 服务中检索 servlet 上下文呢 JAX WS 通过消息上下文提供 Servlet 上下文 可以使
  • 对 log10 函数的未定义引用

    我正在使用 Eclipse Kepler 进行构建 并包括math h 但是 我收到错误 对 log10 的未定义引用 还类型uint8 t and unit32 t都没有得到解决 我已将两者都包括在内stdint h and inttyp
  • PyYAML 错误:无法确定标签“!vault”的构造函数

    我正在尝试读取具有标签的 YAML 文件 vault在里面 我收到错误 无法确定标签 vault 的构造函数 在阅读了几篇博客后 我了解到我需要指定一些构造函数来解决此问题 但我不清楚如何做到这一点 import yaml from yam
  • C# - 将控件移动到鼠标位置

    我试图让一个控件在用户单击并拖动控件时跟随光标 问题是 1 控件没有到达鼠标的位置 2 控件闪烁并飞得到处都是 我尝试了几种不同的方法来做到这一点 但到目前为止都失败了 我试过了 protected override void OnMous
  • 通过 DI 在 Spring 框架中正确使用 LOG4J

    我正在尝试使用 Log4j 作为 Spring 框架的一部分 据我了解 通过使用适当的豆子 系统应该映射一个可在代码中访问的单例实例 同时将日志记录深度自动映射到类 类似于 Log4J 的正常使用 如下所示 Logger log Logge
  • 如何修复 IndentationError:“需要缩进块”?

    我收到一个错误 IndentationError 需要一个缩进块 在第3行 answer subprocess check output home dir final 3 sh 我的代码是 import subprocess while T
  • 是否可以使用 TestCafe .meta 对象跳过从 cli 运行的测试

    我正在使用 TestCafe 来运行我的集成测试 我知道它有test skip函数 当我在本地测试并想要跳过一组我不需要 不想运行的测试时 这非常有用 但我想知道是否有办法运行所有测试 除了 test meta environmentSpe
  • Select2 不创建 name 属性

    我使用 select2 jQuery 插件创建了一个标签框 因此我使用了以下html表单代码
  • 当 UITextField 成为第一响应者时,如何使 UIScrollView 自动滚动

    我看过周围的帖子here https stackoverflow com questions 4585718 disable uiscrollview scrolling when uitextfield becomes first res
  • 使用 C++ 调整位图图像亮度/对比度

    使用 C 调整图像亮度 对比度 无需使用任何其他 3rd 方库或依赖项 图像亮度为here https web archive org web 20091229041814 http www kweii com site color the