我正在尝试读取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图像,但是如果我尝试使用Photoshop打开结果,则该图像是RGB且高度饱和。
答案 0 :(得分:0)
这并不奇怪。 imwrite
将所有内容另存为RGB图像在硬盘上,这意味着您的L通道将被视为硬盘上的R通道(在Photoshop中也是如此)。对于Windows,IMAGE表示RGB。如果要保存Lab图像,则必须将其保存为一种文件,例如txt,xml,yml,二进制文件等。