2012-06-15 5 views
2

Я использую OpenCV для некоторых моих кодов обработки изображений. Я застрял в определенной точке.Доступ к информации о пикселях в цветовом пространстве CIE L * a * b *

В конкретном коде мне нужно сравнить значения пикселей изображения на основе его значений CIE L * a * b *. Я знаю, для BGR мы можем сделать что-то вроде этого:

// img is the image, suppose 
uchar *data = (uchar*)img->imageData; 

for(i=0; i< img->height; i++) 
    for(j=0; j<img->width; j++) 
    { 
     b = data[i*img->widthStep + j*img->nChannels + 0]; 
     g = data[i*img->widthStep + j*img->nChannels + 1]; 
     r = data[i*img->widthStep + j*img->nChannels + 2]; 
    } 

Мой вопрос, можем ли мы сделать что-то подобное для л * а * Ь * цвет модели также? Я имею в виду я сначала преобразовать изображение по

cvCvtColor(img, lab, CV_BGR2Lab); 

затем получить доступ к индивидуальной информации канала, как и в предыдущем случае (с L * A * B * также состоит из 3-х каналов, если не ошибаюсь), может мы получаем значения пикселей?

Причина, по которой я прошу об этом, я попытался ее реализовать, но я получаю некоторые реальные странные значения, такие как очень высокие отрицательные числа (я использовал int datatype вместо uchar, так как я не знал о диапазоне «a» и «b» может иметь), тогда как в Википедии я видел, что «L» может иметь значения только в диапазоне от 0 до 100. Так как же я могу получить эти значения пикселей?

Спасибо заранее!

ответ

2

Несомненно, вы можете это сделать, почему бы и нет? Обратите внимание, однако, что выход несколько специфичен (так как a и b могут быть отрицательными):

On output 0≤L≤100, -127≤a≤127, -127≤b≤127 
The values are then converted to the destination data type: 
    8-bit images: 
     L <- L*255/100, a <- a + 128, b <- b + 128 

отмечает, что L также масштабируется в диапазон 0-255 (вместо 0-100). См. Больше here.

BTW как вы можете получить отрицательные числа, если ваш тип данных unsigned char?

+0

oops !! извините, я забыл упомянуть, что я использовал тип данных int, так как я не был уверен в диапазоне значений «a» и «b». Итак ... Но поскольку вы дали конкретные диапазоны, мне стало намного легче реализовать его. Большое спасибо !! – Koustav

+0

16-бит не поддерживается для этого типа конвертации в OpenCV (по крайней мере, согласно предоставленной мне ссылке), может быть, это тоже проблема? –

+0

Ссылка, которую вы предоставили, была действительно полезна. Теперь я мог получить то, что хотел, используя несколько настроек здесь и там. Поэтому я думаю, что это сортировка, пока не появятся новые ошибки. Спасибо чувак..!! Следующая работа - кластеризация, поэтому, я думаю, скоро я отправлю еще один вопрос: P – Koustav

 Смежные вопросы

  • Нет связанных вопросов^_^