Я пытаюсь преобразовать заданный 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, я не могу понять, что такое моя ошибка.
Update: Я опубликую здесь свои общие результаты: Учитывая изображение (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];
}
}