Форма преобразования RGB в формат изображения HDR (формат EXR) в переполнении стека

Я конвертирую изображение 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;
}
}

У меня вопрос, почему преобразованное изображение имеет другой цвет? Вы можете увидеть данное изображение и преобразованное (открытое в Adobe Photoshop) ниже;
Дано изображение .jpg
Преобразованное изображение .exr

2

Решение

Значения RGB, содержащиеся в большинстве распространенных форматов изображений, таких как JPEG, имеют гамма-коррекцию. Значения RGB в OpenEXR являются линейными. Вам нужно сделать преобразование для каждого пикселя, чтобы сделать его линейным.

Правильное преобразование в линейное будет формула sRGB. Однако для быстрого теста вы можете приблизить его, взяв мощность 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);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]