
Pythons OpenCV verarbeitet Bilder als NumPy-Array ndarray. Es gibt Funktionen zum Drehen oder Spiegeln von Bildern (= ndarray) in OpenCV und NumPy, sterben beide used Werden can.
Dieser Artikel hat folgenden Inhalt.
- Bild drehen mit OpenCV:
cv2.rotate()
- Bild mit OpenCV-Spiegeln:
cv2.flip()
- Bild drehen mit NumPy:
np.rot90()
- Bild mit NumPy-Spiegeln:
np.flip()
Für die Grundlagen der Bildverarbeitung mit NumPy lesen Sie den following Artikel, der verständlich, wie SIE eine Bilddatei mit Pillow(PIL) lesen und ohne Verwendung von OpenCV in ndarray konvertieren und wie Sie ndarray als Bilddatei speichern.
Informationen zum Lesen und Schreiben von Bildern mit OpenCV finden Sie im following Artikel:
Sie können Pillow (PIL) auch verwenden, um ein Bild zu drehen und zu spiegeln.
Die Verwendung von Pillow ist der einfachste Weg, eine vorhandene Bilddatei zu laden, zu drehen, zu spiegeln und zu speichern. Es kann in jedem Winkel gedreht werden, nicht in 90-Grad-Schritten.
Der Beispielcode verwendet das folgende Bild als Beispiel.
Bild drehen mit OpenCV:cv2.rotate()
Die OpenCV-Funktion, die das Bild dreht (= ndarray), ist cv2.rotate().
Geben Sie das ursprüngliche Argument als erstes Argument und die Konstante, die den Rotationswinkel und die Drehrichtung angibt, als zweites Argument rotationCode an.
Die following drei Konstanten can in RotateCode angegeben Werden.
- cv2.ROTATE_90_CLOCKWISE
- cv2.ROTATE_90_COUNTERCLOCKWISE
- cv2.ROTATE_180
Beispielcode und Ergebnisse sind unten.
import cv2
img = cv2.imread('data/src/lena.jpg')
print(type(img))
#
print(img.shape)
# (225, 400, 3)
img_rotate_90_clockwise = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
cv2.imwrite('data/dst/lena_cv_rotate_90_clockwise.jpg', img_rotate_90_clockwise)
# True
img_rotate_90_counterclockwise = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)
cv2.imwrite('data/dst/lena_cv_rotate_90_counterclockwise.jpg', img_rotate_90_counterclockwise)
# True
img_rotate_180 = cv2.rotate(img, cv2.ROTATE_180)
cv2.imwrite('data/dst/lena_cv_rotate_180.jpg', img_rotate_180)
# True
Bild mit OpenCV-Spiegeln:cv2.flip()
Die OpenCV-Funktion, die das Bild (= ndarray) vertikal und horizontal spiegelt, ist cv2.flip().
Geben Sie das ursprüngliche Argument als erstes Argument und einen Wert, der die Richtung angibt, als zweites Argument flipCode an.
Das Bild wird gemäß dem Wert von flipCode wie folgt gespiegelt:
- flipcode = 0: vertikal spiegeln
- flipcode > 0: horizontal spiegeln
- Flipcode
Beispielcode und Ergebnisse sind unten.
import cv2
img = cv2.imread('data/src/lena.jpg')
print(type(img))
#
print(img.shape)
# (225, 400, 3)
img_flip_ud = cv2.flip(img, 0)
cv2.imwrite('data/dst/lena_cv_flip_ud.jpg', img_flip_ud)
# True
img_flip_lr = cv2.flip(img, 1)
cv2.imwrite('data/dst/lena_cv_flip_lr.jpg', img_flip_lr)
# True
img_flip_ud_lr = cv2.flip(img, -1)
cv2.imwrite('data/dst/lena_cv_flip_ud_lr.jpg', img_flip_ud_lr)
# True
Bild drehen mit NumPy:np.rot90()
Die NumPy-Funktion, die ndarray dreht, ist np.rot90().
Geben Sie das ursprüngliche Argument als erstes Argument und die Anzahl der Drehungen um 90 Grad als zweites Argument an.
Wenn das zweite Argument weggelassen WIRD, beträgt die Standarddrehung 90 Grad gegen den Betrachter, und wenn das Argument 2 und 3 ist, beträgt die Drehung 180 Grad und 270 Grad gegen den Betrachter. Nichts finden Sie in den folgenden Artikeln.
Beispielcode und Ergebnisse sind unten.
import numpy as np
from PIL import Image
img = np.array(Image.open('data/src/lena.jpg'))
print(type(img))
#
print(img.shape)
# (225, 400, 3)
Image.fromarray(np.rot90(img)).save('data/dst/lena_np_rot90.jpg')
Image.fromarray(np.rot90(img, 2)).save('data/dst/lena_np_rot90_180.jpg')
Image.fromarray(np.rot90(img, 3)).save('data/dst/lena_np_rot90_270.jpg')
Hier WIRD sterben Bilddatei mit Pillow(PIL) gelesen und geschrieben, aber beim Lesen und Schreiben mit OpenCV wie im Beispiel can SIE anstelle der OpenCV-Funktion auch sterben NumPy-Funktion verwenden, um sterben Drehung zu verarbeiten. Beide drehen gerade ndarray.
Dasselbe gilt für das folgende Beispiel zum Spiegeln.
Bild mit NumPy-Spiegeln:np.flip()
Die NumPy-Funktion, die ndarray vertikal und horizontal kippt, ist np.flip(). Es gibt auch np.flipud(), das vertikal (nach oben und unten) kippt, und np.fliplr(), das horizontal kippt (links und rechts).
Sie können ndarray nur vertikal oder horizontal spiegeln, indem Sie ein Argument von np.flip() angeben, aber es ist einfacher, np.flipud() und np.fliplr() zu verwenden.
Wenn Sie ndarray vertikal und horizontal spiegeln möchten, müssen Sie np.flip() verwenden. Nichts finden Sie im folgenden Artikel.
Beispielcode und Ergebnisse sind unten.
import numpy as np
from PIL import Image
img = np.array(Image.open('data/src/lena.jpg'))
print(type(img))
#
print(img.shape)
# (225, 400, 3)
Image.fromarray(np.flipud(img)).save('data/dst/lena_np_flipud.jpg')
Image.fromarray(np.fliplr(img)).save('data/dst/lena_np_fliplr.jpg')
Image.fromarray(np.flip(img, (0, 1))).save('data/dst/lena_np_flip_ud_lr.jpg')