Dieser Artikel basiert auf der Java-Umgebung und stellt den CvType-Parameter vor, der beim Erstellen eines Mat-Objekts in OpenCV 4.6.0v übergeben wird.
Wenn Sie die Rolle und Bedeutung von Parametern wie CvType.CV_8UCX, CvType.CV_8SCX, CvType.CV_16UCX, CvType.CV_16SCX usw. nicht ganz verstehen,
.
Dieser Artikel kann Ihnen also helfen, die Rolle von Kanälen in OpenCV Mat zu verstehen.
Der folgende Inhalt basiert auf OpenCV SDK 4.6.0v
Dieser Typ ist hauptsächlich Wird verwendet, um den Datentyp in Mat zu definieren. Ein häufiges Verwendungsszenario besteht darin, es beim Erstellen von Mat zu definieren.
Welche Parameter definiert der CvType-Typ? Es bestimmt ganz einfach die beiden Grundindikatoren der Bilddaten in Mat:
Was das Konzept der Kanäle betrifft, habe ich es in einem Artikel https://zinyan.com/?p=493 vorgestellt. Wenn Sie nicht viel über das Konzept von Kanälen wissen, können Sie den vorherigen Artikel lesen.
Wir können dem CvType-Quellcode entnehmen, dass OpenCV 8 Tiefenparameter definiert hat:
#🎜 🎜#public static final int CV_8U = 0, CV_8S = 1, CV_16U = 2, CV_16S = 3, CV_32S = 4, CV_32F = 5, CV_64F = 6, CV_16F = 7;
Das heißt: 8bite, 16bite, 32bite, 64bite. Die folgenden Buchstaben U, S, F dienen zur Definition des Wertebereichs und stellen das Symbol und die Genauigkeit dar.
U: vorzeichenloser Int, vorzeichenlose Ganzzahl, also positive GanzzahlSo können wir es verstehen, indem wir die Definition kombinieren:
# 🎜🎜 #
CV_8U: Es ist eine positive 8-Bit-Ganzzahl, die den Wertebereich des Parameters 0~255 darstellt
In der OpenCV-Definition beträgt die maximale Anzahl von Kanälen 4 und die minimale Anzahl 1. Dies spiegelt sich im Code wider, der ist in der CvType-Klasse C1, C2, C3, C4 definiert. Nr #C4: Stellt vier Kanäle dar
Der Kanal definiert die Länge dieses Double[]-Arrays.
Und RGB ist normalerweise eine Ganzzahl im Bereich von 0 bis 255.
OpenCV verwendet die oben eingeführte Tiefe, um den Bereich der Farbwerte darzustellen.
Die Kombination der beiden ist:
CvType.CV_8UC3: stellt drei Kanäle dar, und der Wertebereich der Parameter in jedem Kanal ist 8 Bits Positive Ganzzahl, also 0~255
Schließlich verstehen wir es anhand der Parameter, als Mat erstellt wurde:
//zinyan:创建了一个4*4尺寸的图片。每个像素点存储了一个double[1]的数组,该数组中值的范围为0~255 Mat mat = new Mat(4, 4, CvType.CV_8UC1); //通常用来表示灰度图或黑白图 //zinyan:创建了一个5*5尺寸的图片。每个像素点存储了一个double[3]的数组,该数组中值的范围为0~255 Mat mat1 = new Mat(5, 5, CvType.CV_8UC3); //通常用来表示彩色图 //zinyan:创建了一个6*6尺寸的图片。每个像素点存储了一个double[3]的数组,该数组中值的范围为0~65535 Mat mat1 = new Mat(6, 6, CvType.CV_16UC3); //通常用来表示彩色图,颜色值范围更广。
Zusammenfassend definiert CvType die Arten der Datenspeicherung in Mat.
definiert, wie viele Pixelwerte Mat speichert und wie groß der Bereich jedes Pixelwerts ist.
Weil verschiedene Algorithmen für Mat den Wert jedes Pixels verarbeiten. Um numerische Werte zu verarbeiten und Berechnungen durchzuführen, müssen Sie dem Algorithmus den Wertebereich jedes numerischen Werts mitteilen.
3. Andere
Wenn Mat von außen hereinkommt. Wie bestimmen wir die Anzahl der Mat-Kanäle und den Wertebereich jedes Werts?
CvType bietet verwandte Abfragemethoden, mit denen wir über den Typtyp in entsprechende Typwerte konvertieren können.
Beispiele sind wie folgt:
Mat mat = new Mat(4, 4, CvType.CV_8UC3); int depth = CvType.depth(mat.type()); //输出结果值为 0 == CvType.CV_8U Mat mat1 = new Mat(4, 4, CvType.CV_16SC1); depth = CvType.depth(mat1.type()); //输出结果值为 3 == CvType.CV_16S
Mat mat1 = new Mat(4, 4, CvType.CV_16SC1); int channels = CvType.channels(mat1.type());//该值为1
Der Wert von CvType.CV_USRTYPE1 entspricht bereits CV_16F. Daher ist dieser Parameter auch mit der Annotation @deprecated gekennzeichnet. Stellt dar, dass es aufgegeben wurde
Es wird empfohlen, es nicht zu verwenden.
Andere Methoden in CvType sind relativ einfach zu verstehen. Schließlich gibt es eine öffentliche statische final int ELEM_SIZE(int type)-Methode
Diese Methode übergibt den Typwert. Das ist der sogenannte CvType.CV_8UC1 und andere Parameterwerte.
Dann wird eine int-Variable zurückgegeben.
Die von dieser Methode zurückgegebene Variable soll die Anzahl der Parameterbytes in jedem Kanal darstellen. 1 Byte repräsentiert 8 Bit, also 8 Bit.
Wenn wir also CV_8U, CV_8S sind, geben Sie einfach die Kanalnummer direkt zurück.
Wenn es sich um 16-Bit-Daten handelt, müssen 2*Kanäle zurückgegeben werden, 32-Bit benötigt 4*Kanäle und 64-Bit benötigt 8*Kanäle .
Dies beendet die Einführung in CvType in OpenCV.
Wenn wir während der Verwendung einen Fehler bezüglich CvType haben. In den meisten Fällen liegt es also daran, dass wir mit CvType nicht vertraut sind.
Oder der Algorithmus, der Anforderungen an Kanal und Tiefe hat, wird verwendet, um Fehler zu verursachen.
Das obige ist der detaillierte Inhalt vonVerstehen Sie die Bedeutung verschiedener Parameter von CvType in OpenCV und verwandten Methoden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!