Skip to content

OpenCV, NumPy: Drehen und Spiegeln von Bildern

Python

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.

Lena

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

OpenCV drehen ROTATE_90_CLOCKWISE

OpenCV drehen ROTATE_90_COUNTERCLOCKWISE

OpenCV dreht ROTATE_180

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

OpenCV-Flip UP-DOWN

OpenCV Flip LINKS-RECHTS

OpenCV Flip HOCH-RUNTER, LINKS-RECHTS

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')

numpy rot90-Bild

numpy rot90 180 Bild

numpy rot90 270 Bild

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')

nupmy flipud Bild

nupmy Fliplr-Bild

nupmy Flip-Bild