Sto provando a rilevare oggetti bianchi in un video. Il primo passaggio consiste nel filtrare l'immagine in modo che lasci solo i pixel di colore bianco. Il mio primo approccio è stato utilizzare lo spazio colore HSV e quindi verificare l'alto livello del canale VAL. Ecco il codice:Qual è il modo migliore per rilevare il colore bianco?
//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;
}
}
lasciando il risultato nel canale di tonalità. Sfortunatamente, questo approccio è molto sensibile all'illuminazione. Sono sicuro che c'è un modo migliore. Eventuali suggerimenti?
Intendo bianco = grigio = senza colore, in realtà sto cercando di rilevare gli occhiali di plastica bianca. Ecco un'immagine di esempio: http://tinypic.com/r/14t1p1x/6 – dnul
Non sono sicuro, stai dicendo che se metto una luce rossa sopra, il colore degli occhiali diventerebbe in qualche modo rossastro e invece di cercare i pixel bianchi dovrei cercare pixel simili, non importa il colore? – dnul
se hai degli oggetti bianchi in una scena e li accendi con una luce rossa diventeranno rossi! In questo caso dovrai trovare il colore di un oggetto "bianco" e cercare quel colore –