Я не могу сохранить изображение RGB как изображение лаборатории

Я пытаюсь прочитать RGB 8-битное изображение, преобразовать его в Lab и сохранить. Результат всегда интерпретируется как RGB-изображение, и это очень странно (насыщенно).

Я пытался не нормализовать значения или использовать RGB2Lab или конвертировать изображения в 32FC, но ничего не работает.

Mat image = imread(path);
cvtColor(image , image , COLOR_BGR2Lab);

Mat imageSplitted[3];
split(image, imageSplitted);
Mat* imageNormalized = normalizeLabValues(imageSplitted);
Mat imageMerged;
merge(imageNormalized, 3, imageMerged);
imwrite(newPathFiltered, imageMerged);

NormalizeLabValues ​​- это функция, которая позволяет решить проблему 8-битных изображений, преобразованных в Lab:

Mat* normalizeLabValues(Mat image[]) {
int rows = image[0].rows;
int cols = image[0].cols;

for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
        // L
        Scalar intensity = image[0].at<uchar>(i, j);
        Scalar normalized_intensity = intensity.val[0] * 100 / 256;
        image[0].at<uchar>(i, j) = normalized_intensity.val[0];

        // a
        intensity = image[1].at<uchar>(i, j);
        normalized_intensity = intensity.val[0] - 126;
        image[1].at<uchar>(i, j) = normalized_intensity.val[0];

        // b
        intensity = image[2].at<uchar>(i, j);
        normalized_intensity = intensity.val[0] - 126;
        image[2].at<uchar>(i, j) = normalized_intensity.val[0];
    }
}


 return image;
}

Я хотел бы получить изображение лаборатории, но если я попытаюсь открыть результаты в Photoshop, оно будет RGB и очень насыщенным.

1 ответ

Это не странно. imwrite сохраняет все как RGB-изображение на жестком диске, это означает, что ваши L-каналы будут рассматриваться как R-каналы на жестком диске (также и в Photoshop). Для окон IMAGE означает RGB. Если вы хотите сохранить изображения Lab, вы должны сохранить их в виде файла, такого как txt, xml, yml, двоичный файл и так далее.

Другие вопросы по тегам