[Python] Utilisation d'OpenCV avec Python (transformation d'image)

resize

cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

|Method interpolation
Nearest Neighbor cv2.INTER_NEAREST
Bilinear cv2.INTER_LINEAR
Bicubic cv2.INTER_CUBIC
In [51]: rszNN = cv2.resize(I, (I.shape[1]*2, I.shape[0]*2), interpolation=cv2.INTER_NEAREST)
    ...: rszBL = cv2.resize(I, (I.shape[1]*2, I.shape[0]*2), interpolation=cv2.INTER_LINEAR)
    ...: rszBC = cv2.resize(I, (I.shape[1]*2, I.shape[0]*2), interpolation=cv2.INTER_CUBIC)

resize.png

import numpy as np
import cv2
import matplotlib.pyplot as plt

I = cv2.imread('./data/SIDBA/Lenna.bmp')

rszNN = cv2.resize(I, (I.shape[1]*2, I.shape[0]*2), interpolation=cv2.INTER_NEAREST)
rszBL = cv2.resize(I, (I.shape[1]*2, I.shape[0]*2), interpolation=cv2.INTER_LINEAR)
rszBC = cv2.resize(I, (I.shape[1]*2, I.shape[0]*2), interpolation=cv2.INTER_CUBIC)

sz  = np.array([I.shape[0],I.shape[1]])
csz = np.array([32,32])
tlpos = (sz - csz)//2
brpos = tlpos + csz

croppedNN = rszNN[tlpos[0]:brpos[0],tlpos[1]:brpos[1],:]
croppedBL = rszBL[tlpos[0]:brpos[0],tlpos[1]:brpos[1],:]
croppedBC = rszBC[tlpos[0]:brpos[0],tlpos[1]:brpos[1],:]

fig, axes = plt.subplots(ncols=3)
axes[0].imshow(croppedNN)
axes[0].set_title('nearest')
axes[0].set(adjustable='box-forced',aspect='equal')
axes[1].imshow(croppedBL)
axes[1].set_title('bilinear')
axes[1].set(adjustable='box-forced',aspect='equal')
axes[2].imshow(croppedBC)
axes[2].set_title('bicubic')
axes[2].set(adjustable='box-forced',aspect='equal')
fig.show()

rotate

Si vous souhaitez effectuer une rotation autour du centre de l'image, utilisez getRotationMatrix2D et warpAffine. Cependant, il est plus facile d'utiliser la rotation de scipy décrite plus loin.

cv2.getRotationMatrix2D(center, angle, scale)

cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]])


import cv2
import matplotlib.pyplot as plt
import numpy as np
from scipy import ndimage

I = cv2.imread('./data/SIDBA/Lenna.bmp')

rIntr = 15
rs = 0
re = 360

Ir = []

for r in range(rs, re+1, rIntr):
    center = (I.shape[1]*0.5,I.shape[0]*0.5)
    rotMat = cv2.getRotationMatrix2D(center, r, 1.0)    
    Irot = cv2.warpAffine(I, rotMat, (I.shape[1],I.shape[0]), flags=cv2.INTER_LINEAR)
    Ir.append(Irot)

cols = 4
rows = int(np.ceil(len(Ir) / float(cols)))

fig, axes = plt.subplots(nrows=rows, ncols=cols, figsize=(3*cols,3*rows))

for idx, I in enumerate(Ir):
    r = idx // cols
    c = idx % cols
    
    title = 'rotate=%d' % (rIntr*idx)
    
    axes[r,c].imshow(cv2.cvtColor(I, cv2.COLOR_BGR2RGB))
    axes[r,c].set_title(title)
    axes[r,c].set(adjustable='box-forced',aspect='equal')
    axes[r,c].get_xaxis().set_visible(False)
    axes[r,c].get_yaxis().set_visible(False)    

for i in range(idx+1, rows*cols):
    r = i // cols
    c = i % cols
    fig.delaxes(axes[r,c])

fig.show()

rotate_opencv.png

Si l'image est rectangulaire

image.png

scipy la rotation est facile à faire avec scipy

scipy.ndimage.interpolation.rotate(input, angle, axes=(1, 0), reshape=True, output=None, order=3, mode='constant', cval=0.0, prefilter=True)

import cv2
import matplotlib.pyplot as plt
import numpy as np
from scipy import ndimage

I = cv2.imread('./data/SIDBA/Lenna.bmp')

rIntr = 15
rs = 0
re = 360

Ir = []

for r in range(rs, re+1, rIntr):
    Irot = ndimage.rotate(I, r, reshape=False)
    Ir.append(Irot)

cols = 4
rows = int(np.ceil(len(Ir) / float(cols)))

fig, axes = plt.subplots(nrows=rows, ncols=cols, figsize=(3*cols,3*rows))

for idx, I in enumerate(Ir):
    r = idx // cols
    c = idx % cols
    
    title = 'rotate=%d' % (rIntr*idx)
    
    axes[r,c].imshow(cv2.cvtColor(I, cv2.COLOR_BGR2RGB))
    axes[r,c].set_title(title)
    axes[r,c].set(adjustable='box-forced',aspect='equal')
    axes[r,c].get_xaxis().set_visible(False)
    axes[r,c].get_yaxis().set_visible(False)    

for i in range(idx+1, rows*cols):
    r = i // cols
    c = i % cols
    fig.delaxes(axes[r,c])

fig.show()

rotate_scipy.png

flip

cv2.flip(src, flipCode[, dst])

Je ne sais pas quel flipCode est vertical ou horizontal

flipCode = 0 ... vertical flipCode = 1 ... horizontal

Vous pouvez utiliser fliplr et flipud de numpy décrit plus loin. lr signifie gauche, droite, ud signifie haut, bas.


import cv2
import matplotlib.pyplot as plt
import numpy as np
from scipy import ndimage

I = cv2.imread('./data/SIDBA/Lenna.bmp')
Iv = cv2.flip(I, 0)
Ih = cv2.flip(I, 1)


fig, axes = plt.subplots(ncols=3, figsize=(15,10))

axes[0].imshow(cv2.cvtColor(I, cv2.COLOR_BGR2RGB))
axes[0].set_title('original')
axes[0].set(adjustable='box-forced',aspect='equal')
axes[0].get_xaxis().set_visible(False)
axes[0].get_yaxis().set_visible(False)

axes[1].imshow(cv2.cvtColor(Iv, cv2.COLOR_BGR2RGB))
axes[1].set_title('flip vertical')
axes[1].set(adjustable='box-forced',aspect='equal')
axes[1].get_xaxis().set_visible(False)
axes[1].get_yaxis().set_visible(False)

axes[2].imshow(cv2.cvtColor(Ih, cv2.COLOR_BGR2RGB))
axes[2].set_title('flip horizontal')
axes[2].set(adjustable='box-forced',aspect='equal')
axes[2].get_xaxis().set_visible(False)
axes[2].get_yaxis().set_visible(False)

fig.show()

flip_opencv.png

numpy

numpy.fliplr(m) Retournement horizontal numpy.flipud(m) Retournement vertical


import cv2
import matplotlib.pyplot as plt
import numpy as np
from scipy import ndimage

I = cv2.imread('./data/SIDBA/Lenna.bmp')
Iv = np.flipud(I)
Ih = np.fliplr(I)


fig, axes = plt.subplots(ncols=3, figsize=(15,10))

axes[0].imshow(cv2.cvtColor(I, cv2.COLOR_BGR2RGB))
axes[0].set_title('original')
axes[0].set(adjustable='box-forced',aspect='equal')
axes[0].get_xaxis().set_visible(False)
axes[0].get_yaxis().set_visible(False)

axes[1].imshow(cv2.cvtColor(Iv, cv2.COLOR_BGR2RGB))
axes[1].set_title('flip vertical')
axes[1].set(adjustable='box-forced',aspect='equal')
axes[1].get_xaxis().set_visible(False)
axes[1].get_yaxis().set_visible(False)

axes[2].imshow(cv2.cvtColor(Ih, cv2.COLOR_BGR2RGB))
axes[2].set_title('flip horizontal')
axes[2].set(adjustable='box-forced',aspect='equal')
axes[2].get_xaxis().set_visible(False)
axes[2].get_yaxis().set_visible(False)

fig.show()

flip_numpy.png

Recommended Posts

[Python] Utilisation d'OpenCV avec Python (transformation d'image)
[Python] Utilisation d'OpenCV avec Python (filtrage d'image)
Édition d'image avec python OpenCV
[Python] Utilisation d'OpenCV avec Python (basique)
Utiliser OpenCV avec Python @Mac
[Python] Utilisation d'OpenCV avec Python (détection des bords)
Essayez de projeter la conversion d'image en utilisant OpenCV avec Python
Trouver la similitude d'image avec Python + OpenCV
Traitement d'image avec Python et OpenCV [Tone Curve]
Acquisition d'images depuis une caméra avec Python + OpenCV
Traitement d'image léger avec Python x OpenCV
Binarisation avec OpenCV / Python
Traitement d'image avec Python
J'ai essayé de "lisser" l'image avec Python + OpenCV
Comment recadrer une image avec Python + OpenCV
J'ai essayé de "binariser" l'image avec Python + OpenCV
[Petite histoire] Tester la génération d'images avec Python / OpenCV
Traitement d'image avec Python (partie 2)
"Traitement Apple" avec OpenCV3 + Python3
[S3] CRUD avec S3 utilisant Python [Python]
Utilisation de Quaternion avec Python ~ numpy-quaternion ~
Capture de caméra avec Python + OpenCV
Tri des fichiers image avec Python (2)
Tri des fichiers image avec Python (3)
Traitement d'image avec Python (partie 1)
Tweet avec image en Python
Tri des fichiers image avec Python
Traitement d'image avec Python (3)
Détection de visage avec Python + OpenCV
Obtenez des fonctionnalités d'image avec OpenCV
Reconnaissance d'image avec Keras + OpenCV
Envoyer en utilisant Python avec Gmail
[Python] Traitement d'image avec scicit-image
[OpenCV / Python] J'ai essayé l'analyse d'image de cellules avec OpenCV
Génération d'images JPEG en spécifiant la qualité avec Python + OpenCV
Créez diverses vidéos Photoshop avec Python + OpenCV ② Créez une image fixe Photoshop
Briller la vie avec Python et OpenCV
Moyenne harmonique par Python (en utilisant SciPy)
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
Découpez une image avec python
Principes de base du traitement d'image en temps réel avec opencv
Capture d'image de Firefox en utilisant Python
Jugement de l'image rétroéclairée avec OpenCV
Utilisation de Rstan de Python avec PypeR
Traitement d'image avec la binarisation Python 100 knocks # 3
Programmation facile Python + OpenCV avec Canopy
Coller le png avec le canal alpha comme une image transparente avec Python / OpenCV
Faisons du scraping d'images avec Python
Essayez la reconnaissance faciale avec python + OpenCV
Découpez le visage avec Python + OpenCV
Reconnaissance faciale avec caméra avec opencv3 + python2.7
Charger une image gif avec Python + OpenCV
Traitement de lignes horizontales à l'aide de la transformation de morphologie OpenCV
Notes sur l'utilisation de rstrip avec python.
Essayez de brouiller l'image avec opencv2
Utiliser OpenCV avec Python 3 dans Window
100 traitement d'image par Python Knock # 2 Échelle de gris
Dessinez une illustration avec Python + OpenCV
Introduction à l'analyse d'image opencv python
Suivre les balles de baseball avec Python + OpenCV
Segmentation basée sur un graphique avec Python + OpenCV