使用 C++、Qt 进行亮度、对比度、伽玛调整

Posted

技术标签:

【中文标题】使用 C++、Qt 进行亮度、对比度、伽玛调整【英文标题】:Brightness, Contrast, Gamma adjustments with C++, Qt 【发布时间】:2011-02-12 23:56:35 【问题描述】:

正确调整图像的亮度、对比度和 Gamma 的最简单方法是什么。 “正确”一词在这里是因为我知道如何不正确地执行这些调整:循环遍历所有 RGB 像素并对每个通道执行以下操作:

int changeBrightness( int value, int brightness) 
    return qBound<int>(0, value + brightness * 255 / 100, 255);

int changeContrast( int value, int contrast ) 
    return qBound<int>(0, int(( value - 127 ) * contrast / 100 ) + 127, 255 );

int changeGamma( int value, int gamma ) 
    return qBound<int>(0, int( pow( value / 255.0, 100.0 / gamma ) * 255 ), 255 );

虽然这段代码会添加亮度/对比度/伽玛变化的效果,但看起来不是很好。像 Photoshop 这样的专业成像软件做得更好。

处理这类东西的最佳库是什么?我知道有 ImageMagick,但它真的很重,我不想只链接到数百个功能中的一个。有没有轻量级的替代品?

【问题讨论】:

除了基本的 bri/con/gamma 调整之外,Photoshop 可能会做一些事情,如果它不会产生与您的实现相同的结果。不过,我会投票给 OpenCV。 ImageMagick 显示与 Photoshop 相似的结果。我认为他们都使用了适当的技术。我敢肯定这不是火箭手术,但仍然相当复杂 【参考方案1】:

绝对是OpenCV

【讨论】:

我实际上是在寻找轻量级的东西,在 OpenCV 和 ImageMagick 之间进行选择,我会选择后者。此外,执行上述调整的 api 链接将有所帮助 我认为您发布的 9 行代码比您可能想出的任何其他解决方案都要轻量级。编写自己的代码有什么“不当”之处? 正如我所提到的 - 这对我来说似乎不合适,因为在 Photoshop 中进行的相同操作会产生质量更好的图像。

以上是关于使用 C++、Qt 进行亮度、对比度、伽玛调整的主要内容,如果未能解决你的问题,请参考以下文章

opencv入门之四Trackbar图像对比度亮度值调整

对比度和亮度自动(用于 OCR)

对比度与亮度调整

opencv4opencv视频教程 C++ 7手动调整图像亮度与对比度 g(i, j) = αf(i, j) + β(点操作与邻域操作概念)

OpenCV 调整图像亮度与对比度

OpenCV 调整图像亮度与对比度