webentwicklung-frage-antwort-db.com.de

Wofür stehen CV_8UC3 und die anderen Typen in OpenCV?

Ich war überrascht, als ich in der OpenCV-Dokumentation nichts finden konnte, das mit Worten beschreibt, wofür die verschiedenen Typen stehen, und Googling war auch keine große Hilfe. Ich weiß, dass CV_8UC1 Graustufen ist, aber wofür steht CV_8UC3? Ist es RGB? Oder YUV?

Was ist auch mit den anderen Definitionen von types_c.h (sie haben auch keine Kommentare). Gibt es ein Muster für die Namenskonvention? Kann ich von ihren Namen zu den Merkmalen wie Farben usw. interpretieren?

#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))
28
sashoalm

Wie in der Dokumentation angegeben

Jeder Grundtyp aus der Liste kann durch einen Bezeichner in .__ definiert werden. das Formular CV_<bit-depth>{U|S|F}C(<number_of_channels>)

dabei ist U ein vorzeichenloser Integer-Typ, S ist ein Integer-Typ mit Vorzeichen und F ist ein Float-Typ.

CV_8UC3 ist eine vorzeichenlose 8-Bit-Ganzzahlmatrix/-bild mit 3 Kanälen . Obwohl es am häufigsten ist, dass dies ein RGB-Bild (oder tatsächlich ein BGR-Bild) ist, ist dies nicht zwingend erforderlich ..__ Es gibt drei Kanäle, und wie Sie sie verwenden, liegt bei Ihnen und Ihrer Anwendung.

41
Hannes Ovrén

Das Benennungsmuster zeigt, wie die Daten tatsächlich im PC-Speicher angeordnet sind und nicht in direktem Zusammenhang mit dem Bildtyp .. stehen. Tatsächlich sind Datenlayout und Bildtyp entkoppelt.

Sie haben wahrscheinlich die Bedeutung für das CV_XX-Muster (dh data layout) herausgefunden.

Wenn Sie OpenCV für den abgebildeten Datentyp bitten, ein Bild als color-Bild zu laden, wird es als BGR - Bild geladen und seine Daten als CV_8UC3 ..__ Dinge zu beachten:

  • ja, die voreingestellte Kanalreihenfolge lautet BGR und nicht RGB. Dies ist eine alte Reihenfolge, da digitale Video-Feeds von Webcams dieser Reihenfolge zu folgen schienen, als sich OpenCV 1.xx in der Entwicklung befand.
  • sie können Typkonvertierungsfunktionen aus dem Modul imgproc verwenden, nämlich cv::cvtColor(). Alle Datenlayouts und Bildtypen sind jedoch nicht kompatibel. Überprüfen Sie das doc ;
  • der Alphakanal wird normalerweise ignoriert. Mit Ignorieren meine ich, dass cv::imwrite() beispielsweise ein 3-Kanal-Bild ohne Alpha schreibt. Die meisten Verarbeitungsfunktionen sind entweder für Einzelkanalbilder spezifisch oder wenden die gleiche Verarbeitung auf alle Kanäle gleichermaßen an.
  • wenn eine Funktion eine (alpha-) Maske akzeptiert, ist normalerweise ein optionaler Parameter vom Typ CV_8UC1 der Standardwert für eine leere Matrix.
11
sansuiso

8UC3 hilft Ihnen beim Zugriff auf die RGB-Daten. Und es ist nicht nur auf Bilder beschränkt. Sie können damit auch auf die RGB-Daten in Point Clouds zugreifen. Wenn Sie den RGB-Wert als Matrix vom Typ 8UC3 übergeben, können Sie diesen Wert im viz-Modul als Farbe anzeigen und eine RGB-Pointcloud anzeigen. 

1
Giant Cloud