détecter l'espace de couleur avec openCV
5 réponses
malheureusement, OpenCV ne fournit aucune indication quant à l'espace de couleur dans la structure D'IplImage, donc si vous prenez aveuglément un IplImage quelque part, il n'y a tout simplement aucun moyen de savoir comment il a été encodé. De plus, aucun algorithme ne peut vous dire avec certitude si une image doit être interprétée comme HSV vs. RGB - ce n'est qu'un tas d'octets à la machine ( ce devrait-il être HSV ou RGB?). Je vous recommande d'envelopper vos images dans une autre structure (ou même un Classe C++ avec gabarits!) pour vous aider à suivre cette information. Si vous êtes vraiment désespéré et que vous avez affaire seulement à un certain type d'images (scènes en plein air, Bureaux, visages, etc.) vous pouvez essayer de calculer quelques statistiques sur vos images (par exemple, construire des statistiques d'histogrammes pour les images RVB naturelles et certaines pour les images HSV naturelles), puis essayer de classer votre image totalement inconnue en comparant l'espace de couleur de votre image est plus proche.
txandi fait un point intéressant. OpenCV a un colorspace BGR qui est utilisé par défaut. Ceci est similaire à l'espace de couleurs du RVB sauf que les canaux B et R sont physiquement commutés dans l'image. Si l'ordre physique du canal est important pour vous, vous devrez convertir votre image avec cette fonction: cvCvtColor(defaultBGR, imageRGB, CV_BGR2RGB).
le structure D'image a un champ nommé colorModel
composé de 4 caractères. Malheureusement, OpenCV ignore ce domaine. Mais vous pouvez utiliser ce champ pour garder une trace des différents modèles de couleur.
Comme rcv , a déclaré, il n'y a pas de méthode pour détecter par programmation l'espace de couleur en inspectant les trois canaux de couleur, sauf si vous avez 151940920" a priori connaissance du contenu de l'image (par exemple, il est un marqueur dans l'image, dont la couleur est connu). Si vous accepter les images provenant de sources inconnues, vous devez permettre à l'utilisateur de spécifier l'espace couleur de leur image. Un bon défaut serait de supposer RVB.
si vous modifiez n'importe quelle couleur de pixel avant l'affichage, et 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 spectateur ou si vous sauvegardez les images dans le fichier, vous devez vous assurer qu'elles sont dans L'espace de couleur BGR.
j'ai essentiellement divisé les canaux et d'afficher chacun d'eux pour comprendre l'espace de couleur de l'image que j'utilise. Il peut ne pas être le meilleur moyen, mais cela 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 /