2013-05-15 5 views
0

Я пытаюсь преобразовать изображение RGB в HSV с помощью функции cvCvtColor(), но результаты являются неожиданными. Например, белые преобразуются в нечто близкое к красному.Преобразование HSV с cvCvtColor() issue

 cvCvtColor(img, hsv, CV_BGR2HSV); 
     cvSplit(hsv, h, s, v, NULL); 
     cvInRangeS(h,cvScalar(0,0,0,0),cvScalar(20,0,0,0),imgthresh); 
     cvShowImage("image", img); 
     cvShowImage("hsv", hsv); 
     cvShowImage("threshold", imgthresh); 

Правильно ли изображение преобразовано и отображается только неправильно? И о пороге, лучший способ сделать это - использовать 3 канала или только оттенок? Я хочу трек красных объектов. Извините за английский. Спасибо.

ответ

3

cvShowImage всегда будет ожидать значения RGB (или BGR, я не уверен). Итак, когда вы конвертируете в HSV, ожидается, что цвет будет отличаться. Используя этот rgb to hsv conversor, вы можете видеть, что белый - в RGB, представленный как (255,255,255), преобразуется в (0,0,100%) в HSV. Поскольку вы говорите, что отображаемый цвет белого красного цвета, я подозреваю, что cvShowImage действительно ожидает BGR по умолчанию.

+2

'cvShowImage()' и 'cv :: imshow()' ожидает упорядочения канала BGR. – Aurelius