Я пытаюсь обнаружить белые объекты в видео. Первый шаг - отфильтровать изображение так, чтобы оно оставляло только пиксели белого цвета. В моем первом подходе использовалось цветовое пространство HSV, а затем проверка на высокий уровень канала VAL. Вот код:
//convert image to hsv
cvCvtColor( src, hsv, CV_BGR2HSV );
cvCvtPixToPlane( hsv, h_plane, s_plane, v_plane, 0 );
for(int x=0;x<srcSize.width;x++){
for(int y=0;y<srcSize.height;y++){
uchar * hue=&((uchar*) (h_plane->imageData+h_plane->widthStep*y))[x];
uchar * sat=&((uchar*) (s_plane->imageData+s_plane->widthStep*y))[x];
uchar * val=&((uchar*) (v_plane->imageData+v_plane->widthStep*y))[x];
if((*val>170))
*hue=255;
else
*hue=0;
}
}
оставляя результат в канале оттенка. К сожалению, этот подход очень чувствителен к освещению. Я уверен, что есть лучший способ. Любые предложения?