Je suis un peu confus avec la type()
méthode de l' Mat
objet dans OpenCV.
Si j'ai des lignes suivantes:
mat = imread("C:\someimage.jpg");
type = mat.type();
et type = 16
. Comment puis-je savoir quel est le type de matrice de tapis?.
J'ai essayé de trouver la réponse dans son manuel ou dans quelques livres en vain.
opencv
opencv-mat
Tae-Sung Shin
la source
la source
depth()
etchannels()
, au lieu d'utilisertype()
qui renvoie un mélange complexe entre le type de données et le nombre de canaux.depth()
codes communs , ce qui est beaucoup plus difficiletype()
.Réponses:
Voici une fonction pratique que vous pouvez utiliser pour vous aider à identifier vos matrices opencv au moment de l'exécution. Je trouve cela utile pour le débogage, au moins.
Si
M
est une var de type,Mat
vous pouvez l'appeler comme ceci:Sortira des données telles que:
Il convient de noter qu'il existe également des méthodes Matrix
Mat::depth()
etMat::channels()
. Cette fonction est juste un moyen pratique d'obtenir une interprétation lisible par l'homme à partir de la combinaison de ces deux valeurs dont les bits sont tous stockés dans la même valeur.la source
depth
etchans
vous pouvez utiliser les macrosCV_MAT_DEPTH(type)
etCV_MAT_CN(type)
, respectivement. Leur type devrait également êtreint
, ce qui vous permettrait d'utiliser à lato_string(chans)
place dechans+'0'
.À des fins de débogage, au cas où vous souhaiteriez rechercher un type Mat :: brut dans un débogueur:
Par exemple, si type = 30, le type de données OpenCV est CV_64FC4. Si type = 50, le type de données OpenCV est CV_16UC (7).
la source
Dans l'en-tête OpenCV " types_c.h ", il y a un ensemble de définitions qui les génèrent, le format est
CV_bits{U|S|F}C<number_of_channels>
Donc, par exemple,
CV_8UC3
signifie 8 bits de caractères non signés, 3 canaux de couleur - chacun de ces noms correspond à un entier arbitraire avec les macros dans ce fichier.Edit: Voir " types_c.h " par exemple:
Donc,
CV_8UC3 = 16
mais vous n'êtes pas censé utiliser ce numéro, vérifiez simplementtype() == CV_8UC3
si vous avez besoin de savoir de quel type est un tableau OpenCV interne.N'oubliez pas qu'OpenCV convertira le jpeg en BGR (ou en échelle de gris si vous passez '0' à
imread
) - donc il ne vous dit rien sur le fichier original.la source
types_c.h
se trouve dans le module principal, par exemple, si OpenCV est installé directement sur le lecteur C dans un dossier opencv_2.4.11, le fichier d'en-tête se trouvera dans C: \ opencv_2.4.11 \ build \ include \ opencv2 \ core \ types_c .hcv::CV_8U
un clic droit et sélectionnerGo to Definition
pour ouvrir le fichier oùcv::CV_8U
est défini ce qui esttypes_c.h
.J'utilise toujours ce lien pour voir quel type est le numéro avec lequel je reçois
type()
:LISTE DES TYPES DE MAT DANS OPENCV
J'espère que cela peut vous aider.
la source
J'ai ajouté une certaine convivialité à la fonction à partir de la réponse de @Octopus, à des fins de débogage.
la source
Quelques autres ont répondu à cette question, mais j'ai trouvé une solution qui fonctionnait vraiment bien pour moi.
la source