47 votes

détecter l'espace couleur avec openCV

Comment puis-je voir l'espace couleur de mon image avec openCV ?

Je voudrais être sûr qu'il s'agit bien de RVB, avant de le convertir en une autre couleur en utilisant la fonction cvCvtColor().

gracias

31voto

Boatzart Points 1650

Malheureusement, OpenCV ne fournit aucune indication quant à l'espace couleur dans la structure IplImage, donc si vous prenez aveuglément une IplImage de quelque part, il n'y a aucun moyen de savoir comment elle a été encodée. De plus, aucun algorithme ne peut vous dire de manière définitive si une image doit être interprétée en HSV ou en RGB - ce n'est qu'un tas d'octets pour la machine (il faudrait este être HSV ou RGB ?). Je vous recommande d'envelopper votre IplImages dans une autre struct (ou même une classe C++ avec des templates !) pour vous aider à garder la trace de ces informations. Si vous êtes vraiment désespéré et que vous n'avez affaire qu'à un certain type d'images (scènes extérieures, bureaux, visages, etc.), vous pouvez essayer de calculer quelques statistiques sur vos images (par exemple, construire des statistiques d'histogramme pour les images RVB naturelles et d'autres pour les images HSV naturelles), puis essayer de classer votre image totalement inconnue en comparant à quel espace de couleur votre image est la plus proche.

7voto

Oliver Points 31

Txandi soulève un point intéressant. OpenCV possède un espace colorimétrique BGR qui est utilisé par défaut. Il est similaire à l'espace de couleurs RVB, sauf que les canaux B et R sont physiquement intervertis dans l'image. Si l'ordre physique des canaux est important pour vous, vous devrez convertir votre image avec cette fonction : cvCvtColor(defaultBGR, imageRGB, CV_BGR2RGB).

5voto

Scottie T Points 4655

Comme rcv dit, il n'y a pas de méthode pour détecter par programme l'espace couleur en inspectant les trois canaux de couleur, à moins que vous n'ayez a priori connaissance du contenu de l'image (par exemple, il y a un marqueur dans l'image dont la couleur est connue). Si vous acceptez des images provenant de sources inconnues, vous devez permettre à l'utilisateur de spécifier l'espace couleur de son image. Une bonne valeur par défaut serait de supposer RGB.

Si vous modifiez l'une des couleurs des pixels avant l'affichage, et que vous utilisez un visualiseur non-OpenCV, vous devriez probablement utiliser cvCvtColor(src,dst,CV_BGR2RGB) après avoir terminé l'exécution de tous vos filtres de couleur. Si vous utilisez OpenCV pour le visualiseur ou si vous enregistrez les images dans un fichier, assurez-vous qu'elles sont dans l'espace couleur BGR.

3voto

f3lix Points 13634

El IplImage struct a un champ nommé colorModel composé de 4 caractères. Malheureusement, OpenCV ignore ce champ. Mais vous pouvez utiliser ce champ pour garder la trace des différents modèles de couleurs.

2voto

Raj Points 31

En fait, je divise les canaux et j'affiche chacun d'eux pour déterminer l'espace couleur de l'image que j'utilise. Ce n'est peut-être pas la meilleure méthode, mais elle fonctionne pour moi.

Pour une explication détaillée, vous pouvez vous référer au lien ci-dessous.

https://dryrungarage.wordpress.com/2018/03/11/image-processing-basics/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X