web-dev-qa-db-fra.com

détecter l'espace colorimétrique avec openCV

comment puis-je voir l'espace colorimétrique de mon image avec openCV?

Je voudrais être sûr que c'est RVB, avant de convertir en un autre en utilisant la fonction cvCvtColor ()

merci

35
aneuryzm

Malheureusement, OpenCV ne fournit aucune sorte d’indication quant à l’espace colorimétrique de la structure IplImage. Par conséquent, si vous prenez aveuglément un IplImage quelque part, il n’ya aucun moyen de savoir comment il a été codé. De plus, aucun algorithme ne peut vous dire de manière définitive si une image doit être interprétée comme étant une HSV par rapport à une RVB - ce n’est qu’un tas d’octets pour la machine ( ceci devrait-il être HSV ou RGB?). Je vous recommande d'envelopper vos IplImages dans une autre structure (ou même une classe C++ avec des modèles!) Pour vous aider à garder une trace de ces informations. Si vous êtes vraiment désespéré et que vous ne traitez qu'un certain type d'images (scènes extérieures, bureaux, visages, etc.), vous pouvez essayer de calculer certaines statistiques sur vos images (par exemple, construire des statistiques d'histogramme pour des images RVB naturelles et d'autres pour HSV naturelles), puis essayez de classer votre image totalement inconnue en comparant l’espace colorimétrique le plus proche de votre image.

17
rcv

txandi fait une remarque intéressante. OpenCV a un espace colorimétrique BGR utilisé par défaut. Ceci est similaire à l'espace de couleurs RVB, sauf que les canaux B et R sont physiquement commutés dans l'image. Si l'ordre des canaux physiques est important pour vous, vous devrez convertir votre image avec cette fonction: cvCvtColor (defaultBGR, imageRGB, CV_BGR2RGB).

6
Oliver

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

3
f3lix

Comme indiqué par rcv , il n’existe pas de méthode permettant de détecter par programme l’espace colorimétrique en inspectant les trois canaux de couleur, sauf si vous avez a priori une connaissance du contenu de l’image la couleur est connue). Si vous acceptez des images de sources inconnues, vous devez autoriser l'utilisateur à spécifier l'espace colorimétrique de leur image. Un bon défaut serait d'assumer RVB. 

Si vous modifiez l'une des couleurs de 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 la visionneuse ou si vous souhaitez enregistrer les images dans un fichier, vous devez vous assurer qu'elles sont dans l'espace colorimétrique BGR.

2
Scottie T

En gros, je scinde les canaux et les affiche pour déterminer l’espace colorimétrique de l’image que j’utilise. Ce n'est peut-être pas la meilleure solution, 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/

0
Raj