Ich bin irgendwie verwirrt mit type()
der Mat
Objektmethode in OpenCV.
Wenn ich folgende Zeilen habe:
mat = imread("C:\someimage.jpg");
type = mat.type();
und type = 16
. Wie finde ich heraus, um welche Art von Mattenmatrix es sich handelt?
Ich habe vergeblich versucht, die Antwort in seinem Handbuch oder in ein paar Büchern zu finden.
opencv
opencv-mat
Tae-Sung Shin
quelle
quelle
depth()
undchannels()
anstelle der Verwendung,type()
die eine komplexe Mischung zwischen Datentyp und Anzahl der Kanäle zurückgibt.depth()
Codes lernen , was weitaus schwieriger isttype()
.Antworten:
Hier ist eine praktische Funktion, mit der Sie Ihre opencv-Matrizen zur Laufzeit identifizieren können. Ich finde es zumindest zum Debuggen nützlich.
Wenn
M
es sich um eine Var-Typ handeltMat
, können Sie sie folgendermaßen aufrufen:Gibt Daten aus wie:
Es ist erwähnenswert, dass es auch Matrix-Methoden
Mat::depth()
und gibtMat::channels()
. Diese Funktion ist nur eine praktische Möglichkeit, aus der Kombination dieser beiden Werte, deren Bits alle im selben Wert gespeichert sind, eine lesbare Interpretation zu erhalten.quelle
depth
undchans
man kann den Makros verwendetCV_MAT_DEPTH(type)
undCV_MAT_CN(type)
ist. Ihr Typ sollte auch seinint
, was Ihnen erlauben würde,to_string(chans)
anstelle von zu verwendenchans+'0'
.Für Debugging-Zwecke, falls Sie einen rohen Mat :: -Typ in einem Debugger nachschlagen möchten:
Wenn beispielsweise type = 30 ist, lautet der OpenCV-Datentyp CV_64FC4. Wenn Typ = 50, ist der OpenCV-Datentyp CV_16UC (7).
quelle
Im OpenCV-Header " types_c.h " gibt es eine Reihe von Definitionen , die diese generieren. Das Format lautet
CV_bits{U|S|F}C<number_of_channels>
also
CV_8UC3
8-Bit-Zeichen ohne Vorzeichen, 3 Farbkanäle - jeder dieser Namen wird einer beliebigen Ganzzahl mit den Makros in dieser Datei zugeordnet.Bearbeiten: Siehe " types_c.h " zum Beispiel:
So
CV_8UC3 = 16
aber sie sollen nicht diese Nummer verwenden, nur überprüfen ,type() == CV_8UC3
wenn Sie wissen müssen, welche Art eine interne OpenCV Array ist.Denken Sie daran, dass OpenCV das JPEG in BGR konvertiert (oder Graustufen, wenn Sie '0' übergeben
imread
) - es sagt Ihnen also nichts über die Originaldatei aus.quelle
types_c.h
sich das im Kernmodul befindet, z. B. wenn Sie OpenCV direkt auf dem Laufwerk C in einem Ordner opencv_2.4.11 installiert haben , befindet sich die Header-Datei unter C: \ opencv_2.4.11 \ build \ include \ opencv2 \ core \ types_c .hcv::CV_8U
rechten Maustaste klicken und auswählenGo to Definition
, um die Datei zu öffnen, in der diecv::CV_8U
Definition definiert isttypes_c.h
.Ich benutze immer diesen Link, um zu sehen, mit welchem Typ ich die Nummer bekomme
type()
:LISTE DES MATTYPEN IN OPENCV
Ich hoffe, das kann Ihnen helfen.
quelle
Ich habe der Funktion aus der Antwort von @Octopus eine gewisse Benutzerfreundlichkeit für Debugging-Zwecke hinzugefügt.
quelle
Dies wurde von einigen anderen beantwortet, aber ich fand eine Lösung, die für mich wirklich gut funktionierte.
quelle