Heim > Backend-Entwicklung > C++ > Warum führt „Point(x,y)' in OpenCV zu unerwarteten Ergebnissen, wenn es mit „line()' im Vergleich zu „src.at(i,j)' verwendet wird?

Warum führt „Point(x,y)' in OpenCV zu unerwarteten Ergebnissen, wenn es mit „line()' im Vergleich zu „src.at(i,j)' verwendet wird?

Linda Hamilton
Freigeben: 2024-12-19 07:25:09
Original
113 Leute haben es durchsucht

Why does `Point(x,y)` in OpenCV produce unexpected results when used with `line()` compared to `src.at(i,j)`?

OpenCV: Point(x,y)-Darstellung verstehen

Bei der Bildverarbeitung kann das Verständnis der Reihenfolge von Punkten von entscheidender Bedeutung sein. OpenCV, eine beliebte Computer-Vision-Bibliothek, verwendet ein Koordinatensystem, das zu Verwirrung hinsichtlich der Darstellung von Punkten führen kann.

Die Frage:

Betrachten Sie ein in einem gespeichertes Bild Matrix src mit den Abmessungen 300x200. Bei Anwendung der folgenden Operation:

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 );
  }
}
imshow("A",src);
waitKey(0);
Nach dem Login kopieren

Das erwartete Ergebnis besteht darin, das gesamte Bild mit weißen Linien zu füllen. Allerdings wird nur der obere Teil weiß.

Dieses Verhalten steht im Gegensatz zum folgenden Vorgang:

for(int i = 0; i < src.rows; i++){
  for(int j = 0; j < src.cols; j++){
    src.at<uchar>(i,j)=255;
  }
}
imshow("A",src);
waitKey(0);
Nach dem Login kopieren

bei dem das gesamte Bild erfolgreich mit Weiß gefüllt wird.

Die Antwort:

Die Erklärung liegt in den unterschiedlichen Darstellungen, die dafür verwendet werden Punkte:

  • src.at(i,j): Verwendet (i,j) als (Zeile,Spalte).
  • Punkt(x,y): Verwendet (x,y) als (Spalte, Zeile).

Diese Diskrepanz ergibt sich aus der Doppelnatur von OpenCVs Mat, das sowohl Bilder als auch Matrizen darstellt. In der Matrixschreibweise wird die Zeilen-Hauptreihenfolge verwendet, wobei der erste Index die Zeile und der zweite Index die Spalte darstellt. Diese Konvention stimmt mit src.at(i,j) überein.

Im Gegensatz dazu folgt das Koordinatensystem für Punkte der Bildnotation, wobei der erste Wert die x-Richtung (Spalte) angibt und der zweite Der Wert gibt die Y-Richtung (Zeile) an. Dies erklärt die Verwendung der (Spalte,Zeile)-Reihenfolge in Punkt(x,y) und die Ausrichtung mit src.at(Spalte,Zeile).

Das Verständnis dieser Unterscheidung ist für den effektiven Zugriff und die Änderung von wesentlicher Bedeutung Punkte in OpenCV.

Das obige ist der detaillierte Inhalt vonWarum führt „Point(x,y)' in OpenCV zu unerwarteten Ergebnissen, wenn es mit „line()' im Vergleich zu „src.at(i,j)' verwendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage