c++ - 在 C++ 中将 RGB 格式转换为 HDR 图像格式(EXR 格式)

标签 c++ image qt image-processing openexr

我正在将 RGB 图像转换为 EXR 格式,使用 openexr ,如下:

int w = 1024;
int h = 768;

Array2D<Rgba> p (h, w);
QString fileName = "Penguins.jpg";
QImage Image = QImage(fileName);


QRgb c;

for (int y = 0; y < h; ++y)
{
    for (int x = 0; x < w; ++x)
    {
        c = Image.pixel(x,y);
        Rgba &p = px[y][x];
        p.r = qRed(c)/255.0;
        p.g = qGreen(c)/255.0;
        p.b = qBlue(c)/255.0;
        p.a = 1;
    }
}

但是,与图形编辑软件(如 Adob​​e Photoshop)的结果相比,转换后的图像有不同的颜色。下面,您可以看到给定的图像和转换后的图像(在 Adob​​e Photoshop 中打开): Given Image .jpg Converted Image .exr

最佳答案

大多数常见图像格式(如 JPEG)中包含的 RGB 值都经过 Gamma 校正。 OpenEXR 中的 RGB 值是线性的。您需要对每个像素进行转换以使其呈线性。

正确的线性转换是 sRGB formula .然而,为了快速测试,您可以通过取 2.2 的幂来近似它:

    p.r = pow(qRed(c)/255.0, 2.2);
    p.g = pow(qGreen(c)/255.0, 2.2);
    p.b = pow(qBlue(c)/255.0, 2.2);

关于c++ - 在 C++ 中将 RGB 格式转换为 HDR 图像格式(EXR 格式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22255992/

相关文章:

c++ - C和C++相对于一元算术运算符存在差异的原因是什么 +

c++ - 运算符重载 - C++

c++ - 对于使用 Clang 构建的目标文件,我需要与 MinGW 链接哪些库?

c++ - 扩展QTextDocument中 block 的定义

javascript - 悬停并放大时,获取较小的图像以完整质量加载

linux - 哪个交叉编译器?

image - 检索网络 Assets 时出错( flutter )

css - 如何在中心对齐背景图像并让它在响应时保持其大小

c++ - QGraphicsScene 没有移除 QWidget 的功能

Qt - 将光标更改为沙漏并禁用光标