Преобразование 8-битного изображения OpenCV BGR в CIE L * a * b *

Я пытаюсь конвертировать данныйMat представляяRGB изображение с 8-битной глубиной доLab используя функцию, представленную в документации:

cvtColor(source, destination, <conversion code>);

Я пробовал следующие конверсионные коды:

CV_RGB2Lab
CV_BGR2Lab
CV_LBGR2Lab

Каждый раз я получал странные результаты со знаком "L" значение больше 100 для некоторых образцов, буквально & lt; 107, 125, 130 & gt ;.

Я также использую Photoshop для проверки результатов, но учитывая, что 107 выходит за допустимый диапазон 0 & # x2264; L & # x2264; 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];
    }
}

Ответы на вопрос(4)

Ваш ответ на вопрос