Que signifient CV 8UC3 et les autres types dans OpenCV?

j'ai été surpris quand je n'ai rien trouvé dans la documentation D'OpenCV décrivant - avec des mots - ce que les différents types représentent, et googler n'a pas été d'une grande aide non plus. Je sais que CV_8UC1 est à échelle grise, mais que signifie CV_8UC3? Est-il RVB? Ou YUV?

Aussi, pour les autres définitions de types_c.h (ils manquent aussi de commentaires). Est-il un modèle de ce que la convention de nommage est? Puis-je interpréter à partir de leurs noms à ce que leurs caractéristiques sont, comme les couleurs, etc.?

#define CV_8UC1 CV_MAKETYPE(CV_8U,1)
#define CV_8UC2 CV_MAKETYPE(CV_8U,2)
#define CV_8UC3 CV_MAKETYPE(CV_8U,3)
#define CV_8UC4 CV_MAKETYPE(CV_8U,4)
#define CV_8UC(n) CV_MAKETYPE(CV_8U,(n))

#define CV_8SC1 CV_MAKETYPE(CV_8S,1)
#define CV_8SC2 CV_MAKETYPE(CV_8S,2)
#define CV_8SC3 CV_MAKETYPE(CV_8S,3)
#define CV_8SC4 CV_MAKETYPE(CV_8S,4)
#define CV_8SC(n) CV_MAKETYPE(CV_8S,(n))

#define CV_16UC1 CV_MAKETYPE(CV_16U,1)
#define CV_16UC2 CV_MAKETYPE(CV_16U,2)
#define CV_16UC3 CV_MAKETYPE(CV_16U,3)
#define CV_16UC4 CV_MAKETYPE(CV_16U,4)
#define CV_16UC(n) CV_MAKETYPE(CV_16U,(n))

#define CV_16SC1 CV_MAKETYPE(CV_16S,1)
#define CV_16SC2 CV_MAKETYPE(CV_16S,2)
#define CV_16SC3 CV_MAKETYPE(CV_16S,3)
#define CV_16SC4 CV_MAKETYPE(CV_16S,4)
#define CV_16SC(n) CV_MAKETYPE(CV_16S,(n))

#define CV_32SC1 CV_MAKETYPE(CV_32S,1)
#define CV_32SC2 CV_MAKETYPE(CV_32S,2)
#define CV_32SC3 CV_MAKETYPE(CV_32S,3)
#define CV_32SC4 CV_MAKETYPE(CV_32S,4)
#define CV_32SC(n) CV_MAKETYPE(CV_32S,(n))

#define CV_32FC1 CV_MAKETYPE(CV_32F,1)
#define CV_32FC2 CV_MAKETYPE(CV_32F,2)
#define CV_32FC3 CV_MAKETYPE(CV_32F,3)
#define CV_32FC4 CV_MAKETYPE(CV_32F,4)
#define CV_32FC(n) CV_MAKETYPE(CV_32F,(n))

#define CV_64FC1 CV_MAKETYPE(CV_64F,1)
#define CV_64FC2 CV_MAKETYPE(CV_64F,2)
#define CV_64FC3 CV_MAKETYPE(CV_64F,3)
#define CV_64FC4 CV_MAKETYPE(CV_64F,4)
#define CV_64FC(n) CV_MAKETYPE(CV_64F,(n))
25
demandé sur sashoalm 2014-11-28 10:36:10
la source

3 ответов

Comme indiqué dans le la documentation

n'Importe quel type primitif de la liste peut être définie par un identifiant dans la forme CV_<bit-depth>{U|S|F}C(<number_of_channels>)

où U est un type entier non signé, S est un type entier signé, et F est un type flottant.

CV_8UC3 est une matrice/image entière non signée de 8 bits avec 3 canaux. Bien qu'il s'agisse le plus souvent d'une image de RGB (ou en fait de BGR), cela n'est pas obligatoire. Cela signifie simplement qu'il y a trois canaux, et la façon dont vous les utilisez dépend de vous et de votre application.

36
répondu Hannes Ovrén 2014-11-28 10:44:09
la source

le patron de nommage montre comment les données sont en fait disposées dans la mémoire du PC et ne sont pas directement liées au type d'image. En fait, la mise en page des données et le type d'image sont découplés.

vous avez probablement trouvé la signification du motif CV_XX (i.e.,mise en page des données).

pour le type de données image, si vous demandez à OpenCV de charger une image comme un couleur de l'image, il se charge comme un BGR image et disposer ses données comme CV_8UC3. Quelques de choses à connaître:

  • oui, le canal par défaut de la commande est BGR et non RGB. Il s'agit d'une commande traditionnelle parce que les flux vidéo numériques des webcams semblaient suivre cet ordre quand OpenCV 1.xx est en cours de développement;
  • vous pouvez utiliser les fonctions de conversion de type du module imgproc,cv::cvtColor(). Tous les layouts de données et les types d'image ne sont pas compatibles cependant, vérifiez le doc;
  • le canal alpha est généralement ignoré. En l'ignorant, je veux dire que cv::imwrite() écrira une image 3 canaux sans alpha par exemple. La plupart des fonctions de traitement seront soit spécifiques aux images à canal unique, soit appliquent le même traitement à tous les canaux de façon égale;
  • lorsqu'une fonction accepte un masque (alpha -), il s'agit généralement d'un paramètre optionnel de type CV_8UC1 qui est par défaut une matrice vide.
9
répondu sansuiso 2014-11-28 10:58:16
la source

8UC3 vous aide à accéder aux données du RGB. Et cela ne se limite pas aux images. Vous pouvez également l'utiliser pour accéder aux données RVB dans les nuages de points. Si vous passez la valeur RGB comme une matrice de type 8UC3, vous pouvez alors afficher cette valeur en couleur dans le module viz et afficher un Pointcloud RGB.

0
répondu Giant Cloud 2018-01-30 14:11:37
la source

Autres questions sur