Опитвам се да преобразувам даден Mat
, представляващ RGB изображение с 8-битова дълбочина в Lab, като използвам функцията, предоставена в документацията:
cvtColor(source, destination, <conversion code>);
Опитах следните кодове за преобразуване:
CV_RGB2Lab
CV_BGR2Lab
CV_LBGR2Lab
Всеки път съм получавал странни резултати със стойност на "L" над 100 за някои проби, буквално ‹107, 125, 130>.
Използвам и Photoshop, за да проверя резултатите - но като се има предвид, че 107 е извън приетия диапазон от 0 ≤ L ≤ 100, не мога да разбера каква е моята грешка.
Актуализация: Ще публикувам общите си резултати тук: Като се има предвид изображение (Mat), представено от 8-битов BGR, изображението може да бъде преобразувано чрез следното:
cvtColor(source, destination, CV_BGR2Lab);
Тогава стойностите на пикселите могат да бъдат достъпни по следния начин:
int step = destination.step;
int channels = destination.channels();
for (int i = 0; i < destination.rows(); i++) {
for (int j = 0; j < destination.cols(); j++) {
Point3_<uchar> pixelData;
//L*: 0-255 (elsewhere is represented by 0 to 100)
pixelData.x = destination.data[step*i + channels*j + 0];
//a*: 0-255 (elsewhere is represented by -127 to 127)
pixelData.y = destination.data[step*i + channels*j + 1];
//b*: 0-255 (elsewhere is represented by -127 to 127)
pixelData.z = destination.data[step*i + channels*j + 2];
}
}