2010-06-17 8 views
5

J'essaie de détecter des objets blancs dans une vidéo. La première étape consiste à filtrer l'image afin qu'elle ne laisse que des pixels de couleur blanche. Ma première approche consistait à utiliser l'espace colorimétrique HSV puis à vérifier le niveau élevé du canal VAL. Voici le code:Quelle est la meilleure façon de détecter la couleur blanche?

//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; 
    } 
} 

en laissant le résultat dans le canal de teinte. Malheureusement, cette approche est très sensible à l'éclairage. Je suis sûr qu'il y a un meilleur moyen. Aucune suggestion?

Répondre

2

Il va être sensible à l'éclairage - que se passe-t-il si vous le voyez sous un feu rouge!
Je ne sais pas si l'utilisation d'espace YUV est beaucoup plus facile que la recherche de valeurs RVB similaires. Edit - Normalement vous appelez quelque chose sans couleur grise (pourrait vous aider avec les recherches).
Si vous avez le choix, il s'agit de la couleur la plus mauvaise à rechercher, car elle reflète tout autre éclairage de la scène. Vous devrez donc détecter la couleur d'éclairage globale et ajuster pour cela. Donc, ce que vous cherchez, ce sont des pixels avec des valeurs RVB simi- laires, ou des valeurs RVB dans le rapport de la moyenne des objets de la scène.

+0

Je veux dire blanc = gris = pas de couleur, en fait j'essaie de détecter les verres en plastique blanc. Voici un exemple d'image: http://tinypic.com/r/14t1p1x/6 – dnul

+0

Je ne suis pas sûr, vous dites que si je mets une lumière rouge sur le dessus alors la couleur des lunettes deviendrait en quelque sorte rougeâtre et au lieu de chercher des pixels blancs, je devrais chercher des pixels similaires, peu importe la couleur? – dnul

+3

Si vous avez des objets blancs dans une scène et les allumer avec une lumière rouge, ils vont avoir l'air rouge! Dans ce cas, vous devrez trouver la couleur d'un objet «blanc» et rechercher cette couleur –

2

Pourquoi utilisez-vous HSV? Il serait plus logique de convertir en langage HSL et d'utiliser le canal de luminance. Bien sûr, vous n'obtiendrez pas seulement du blanc, mais chaque couleur avec une luminance élevée sur un seuil. Après tout, vous ne pouvez pas compter sur du blanc pur à moins que votre image source ait été surexposée.

2

Une autre façon serait de transformer votre image en niveaux de gris. Le blanc aura des valeurs très élevées (presque> 225).

Encore une autre façon serait de ET les plans R, G et B. Seuls les blancs resteront dans l'image résultante. De cette façon, vous ne perdez pas de temps à convertir l'espace couleur HSV. Vous effectuez simplement une opération AND simple à chaque pixel.

Questions connexes