【问题标题】:Conversion form RGB to HDR image format (EXR format) in C++C++中RGB到HDR图像格式(EXR格式)的转换
【发布时间】:2014-04-10 22:46:07
【问题描述】:

我正在将 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 中打开):

【问题讨论】:

    标签: c++ image qt image-processing openexr


    【解决方案1】:

    大多数常见图像格式(如 JPEG)中包含的 RGB 值都经过伽马校正。 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);
    

    【讨论】:

    • 感谢您的回答,在应用转换后,Adobe Photoshop 中的颜色似乎正确,虽然我不明白为什么使用 mac 预览时,颜色会有所不同。
    • @csuo Macs 过去使用 1.8 的不同 gamma,请参阅 support.apple.com/kb/HT3712
    猜你喜欢
    • 2020-02-29
    • 2014-09-28
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 2011-10-04
    • 2018-01-10
    • 2019-08-28
    相关资源
    最近更新 更多