Я пытаюсь прочитать 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;
}
Я бы хотела получить изображение Lab, но если я попытаюсь открыть результаты с помощьюФотошоп это RGB и очень насыщенный.