OpenCV Bild drehen
-
Verwenden Sie die
rotate()
-Funktion von OpenCV, um ein Bild in Python zu drehen -
Verwenden Sie die
warpAffine()
-Funktion von OpenCV, um ein Bild in Python zu drehen
In diesem Tutorial wird das Drehen eines Bildes mit den Funktionen rotate()
und warpAffine()
von OpenCV in Python besprochen.
Verwenden Sie die rotate()
-Funktion von OpenCV, um ein Bild in Python zu drehen
Wir können die rotate()
-Funktion von OpenCV verwenden, um ein Bild zu drehen. Das erste Argument der Funktion rotate()
ist das Bild, das wir drehen möchten. Das zweite Argument gibt an, um wie viel sich das Bild drehen wird und in welche Richtung.
Es gibt nur drei Möglichkeiten, ein Bild mit der Funktion rotate()
zu drehen. Wir können das zweite Argument auf cv2.ROTATE_90_CLOKWISE
setzen, um das Bild um 90 Grad im Uhrzeigersinn zu drehen.
Mit cv2.ROTATE_180
können wir das Bild um 180 Grad drehen oder spiegeln. Wir können cv2.ROTATE_90_COUNTERCLOCKWISE
verwenden, um das Bild um 90 Grad gegen den Uhrzeigersinn oder um 270 Grad im Uhrzeigersinn zu drehen. Dies sind die einzigen drei Winkel, um ein Bild mit der Funktion rotate()
zu drehen.
Lassen Sie uns zum Beispiel ein Bild mit der Funktion imread()
lesen, es um 90 Grad im Uhrzeigersinn drehen und es dann mit der Funktion imshow()
zusammen mit dem Originalbild anzeigen. Siehe Code unten.
import cv2
import numpy as np
image = cv2.imread("cat.jpg")
image_norm = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)
cv2.imshow("original Image", image)
cv2.imshow("Rotated Image", image_norm)
cv2.waitKey(0)
cv2.destroyAllWindows()
Ausgabe:
Mit rotate()
können wir ein Bild nur in drei Angular drehen, aber wenn wir ein Bild in jedem Winkel drehen wollen, können wir die unten beschriebene Funktion warpAffine()
verwenden.
Verwenden Sie die warpAffine()
-Funktion von OpenCV, um ein Bild in Python zu drehen
Wir können die Funktion warpAffine()
von OpenCV verwenden, um ein Bild in einem beliebigen Winkel zu drehen. Die Funktion warpAffine()
transformiert eine Matrix für eine andere Matrix.
Um ein Bild zu drehen, müssen wir seine Rotationsmatrix mit der Funktion getRotationMatrix2D()
von OpenCV finden.
Das erste Argument von getRotationMatrix2D()
ist der Mittelpunkt des Bildes, entlang dem wir es drehen wollen. Das zweite Argument ist der Rotationswinkel und das dritte Argument ist der Maßstab des Bildes.
Wenn der Maßstab kleiner als eins ist, wird das Bild kleiner als das Originalbild, oder mit anderen Worten, es wird herausgezoomt. Das Bild wird skaliert oder vergrößert, wenn die Skalierung eine positive Zahl ist. Wenn die Skalierung 1 ist, wird das Bild nicht skaliert.
Das erste Argument der Funktion warpAffine()
ist das Bild, das wir drehen möchten. Das zweite Argument ist die Rotationsmatrix und das dritte Argument ist die Größe des Ausgabebildes.
Lassen Sie uns beispielsweise das obige Bild um 45 Grad um seinen Mittelpunkt drehen. Siehe Code unten.
import cv2
import numpy as np
image = cv2.imread("cat.jpg")
(h, w) = image.shape[:2]
center = (w / 2, h / 2)
angle = 30
scale = 1
M = cv2.getRotationMatrix2D(center, angle, scale)
rotated = cv2.warpAffine(image, M, (w, h))
cv2.imshow("original Image", image)
cv2.imshow("Rotated Image", rotated)
cv2.waitKey(0)
cv2.destroyAllWindows()
Ausgabe:
Im obigen Code haben wir die Shape-Methode verwendet, um die Länge und Breite des angegebenen Bildes zu ermitteln, und dann haben wir die Mitte des Bildes berechnet, indem wir die Hälfte der Länge und Breite genommen haben. Wir können den Mittelpunkt, den Winkel und den Skalierungswert ändern, um das gewünschte Ergebnis zu erhalten.
Wir können auch den Randmodus des Ausgabebildes mit dem Argument borderMode
einstellen. Standardmäßig ist der Randmodus auf cv2.BORDER_CONSTANT
eingestellt, und wie Sie sehen können, gibt es an den Ecken des Ausgabebildes keinen Rand.
Wir können den Randmodus auf cv2.BORDER_TRANSPARENT
setzen. Das Ausgabebild hat die gleichen Ränder wie das Originalbild, oder die Ecken bleiben gleich.
Wir können den Rahmenmodus auf cv2.BORDER_REPLICATE
setzen. Der Rand oder die Ecken des Ausgabebildes werden mit den benachbarten Pixeln gezeichnet.
Klicken Sie auf diesen Link, um weitere Einzelheiten über die Rahmenmodi zu erfahren.
Verwandter Artikel - Python OpenCV
- Bildmaskierung in OpenCV
- Kein Modul mit dem Namen CV2 in Mac in Python
- OpenCV ArUco-Marker
- OpenCV Canny in Python
- OpenCV-contrib-Modul in Python
- OpenCV-Paketkonfiguration