Heim >Backend-Entwicklung >C++ >Wie unterscheidet sich „Point(x,y)' von OpenCV von „at(i,j)' in Matrix Access?
In Bildverarbeitungsbibliotheken wie OpenCV können das Koordinatensystem und die Reihenfolge der Matrixelemente verwirrend sein. Ziel dieses Artikels ist es, diese Konzepte zu klären, insbesondere die Verwendung von Point(x,y) in OpenCV im Vergleich zu at(i,j) für den Zugriff auf Matrixelemente.
CV von OpenCV: Die :Mat-Datenstruktur wird sowohl für Bilder als auch für Matrizen verwendet. Mathematisch gesehen werden Matrizen in der Hauptreihenfolge der Zeilen geordnet, was bedeutet, dass der erste Index die Zeile und der zweite Index die Spalte bezeichnet.
Punkte in einem Koordinatensystem werden üblicherweise nach x geordnet Zuerst die -Achse und dann die Y-Achse (kartesisches Koordinatensystem). In der Bildverarbeitung wird die verwendete Achsenreihenfolge jedoch als Bildnotation bezeichnet, wobei der erste Wert die x-Richtung (Abszisse) und der zweite Wert die y-Richtung (Ordinate) darstellt.
Die at(i,j)-Methode von OCV ermöglicht den Zugriff auf Elemente mithilfe von (Zeilen-, Spalten-)Indizes, wobei die obere linke Ecke der Matrix ist (0,0).
Der Point(x,y)-Konstruktor in OpenCV ermöglicht den Zugriff auf Elemente eines cv::Mat mithilfe der Bildnotation, wobei x die Spalte und y darstellt die Zeile.
Betrachten Sie eine 300x200-Matrix (src):
for (int i = 0; i < src.rows; i++) { for (int j = 0; j < src.cols; j++) { line(src, Point(i, j), Point(i, j), Scalar(255, 0, 0), 1, 8); } }
Dieser Code soll eine weiße Linie auf dem gesamten Bild zeichnen. Es füllt jedoch nur den oberen Teil des Bildes aus. Dies liegt daran, dass die Linienfunktion den Point(i,j)-Konstruktor verwendet, der i als Spalte und j als Zeile interpretiert.
Die Verwendung von at(i,j) anstelle von Point(i,j) würde dies tun Füllen Sie das gesamte Bild korrekt mit Weiß aus, da die Reihenfolge (Zeile, Spalte) verwendet wird.
Den Unterschied zwischen Zeilen-/Spaltenreihenfolge verstehen Matrizen und die für Punkte in OpenCV verwendete Bildnotation sind entscheidend für die effektive Bearbeitung von Bildern und Matrizen in OpenCV. Die at(i,j)-Methode und der Point(x,y)-Konstruktor bieten bequeme Möglichkeiten, auf Elemente basierend auf verschiedenen Koordinatensystemen zuzugreifen und so den spezifischen Anforderungen der Anwendung gerecht zu werden.
Das obige ist der detaillierte Inhalt vonWie unterscheidet sich „Point(x,y)' von OpenCV von „at(i,j)' in Matrix Access?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!