
OpenCV di Python gestisce le immagini come array NumPy ndarray. Esistono funzioni per ruotare o capovolgere le immagini (= ndarray) in OpenCV e NumPy, entrambe utilizzabili.
In questo articolo vengono descritti i seguenti contenuti.
- Ruota immagine con OpenCV:
cv2.rotate()
- Capovolgi l’immagine con OpenCV:
cv2.flip()
- Ruota immagine con NumPy:
np.rot90()
- Capovolgi l’immagine con NumPy:
np.flip()
Per le nozioni di base sull’elaborazione delle immagini con NumPy, vedere l’articolo seguente che descrive come leggere un file immagine con Pillow (PIL) e convertirlo in ndarray senza utilizzare OpenCV e come salvare ndarray come file immagine.
Per leggere e immagini con OpenCV, vedere il seguente articolo:
Puoi anche usare Pillow (PIL) per ruotare e capovolgere un’immagine.
Usare Pillow è il modo più semplice e facile per caricare un file immagine esistente, ruotarlo, capovolgerlo e salvarlo. Può ruotare con qualsiasi angolazione, non con incrementi di 90 gradi.
Il codice di esempio usa l’immagine seguente come esempio.
Ruota immagine con OpenCV:cv2.rotate()
La funzione OpenCV che ruota l’immagine (= ndarray) è cv2.rotate().
Specificare il ndarray originale come primo argomento e la costante che indica l’angolo di rotazione e la direzione come secondo argomento rotateCode.
Le tre costanti possono essere specificate in rotateCode.
- cv2.RUOTA_90_IN SENSO ORARIO
- cv2.RUOTA_90_SENSO ANTIORARIO
- cv2.RUOTA_180
Il codice di esempio ei risultati sono seguiti.
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
Capovolgi l’immagine con OpenCV:cv2.flip()
La funzione OpenCV che capovolge l’immagine (= ndarray) verticalmente e orizzontalmente è cv2.flip().
Specificare il ndarray originale come primo argomento e un valore che indica le direzioni come secondo argomento flipCode.
L’immagine viene capovolta in base al valore di flipCode come segue:
- flipcode = 0: capovolgi verticalmente
- flipcode > 0: capovolgi orizzontalmente
- codice a fogli mobili
Il codice di esempio ei risultati sono seguiti.
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
Ruota immagine con NumPy:np.rot90()
La funzione NumPy che ruota ndarray è np.rot90().
Specificare il ndarray originale come primo argomento e il numero di volte per ruotare di 90 gradi come secondo argomento.
Quando il secondo argomento viene omesso, la rotazione predefinita è di 90 gradi in senso antiorario e quando il secondo argomento è 2 e 3, la rotazione è di 180 gradi e 270 gradi in senso antiorario. Vedere i seguenti articoli per i dettagli.
Il codice di esempio ei risultati sono seguiti.
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')
Qui, il file immagine viene letto e scritto usando Pillow(PIL), ma durante la lettura e scrittura con OpenCV come nell’esempio sopra, puoi anche usare la funzione NumPy invece della funzione OpenCV per elaborare la rotazione. Entrambi stanno solo ruotando ndarray.
Lo stesso vale per il seguente esempio di capovolgimento.
Capovolgi l’immagine con NumPy:np.flip()
La funzione NumPy che capovolge ndarray verticalmente e orizzontalmente è np.flip(). Ci sono anche np.flipud() che ruota verticalmente (su e giù) e np.fliplr() che ruota orizzontalmente (sinistra e destra).
Puoi capovolgere ndarray solo verticalmente o orizzontalmente specificando un argomento di np.flip(), ma è più semplice usare np.flipud() e np.fliplr().
Se vuoi capovolgere ndarray verticalmente e orizzontalmente, devi usare np.flip(). Vedere il seguente articolo per i dettagli.
Il codice di esempio ei risultati sono seguiti.
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')