2017-07-29 4 views
2

J'ai donc une image 800 x 600 que je veux couper verticalement en deux images de taille égale en utilisant OpenCV 3.1.0. Cela signifie qu'à la fin de la coupe, je devrais avoir deux images de 400 x 600 chacune et qui sont stockées dans leurs propres variables PIL.Comment couper une image verticalement en deux images de taille égale

est ici une illustration:

Paper being cut into halves

Merci.

EDIT: Je veux la solution la plus efficace, donc si cette solution utilise un épissage numpy ou quelque chose comme ça, alors allez-y.

+3

Beau diagramme !!! –

Répondre

3

Vous pouvez essayer le code suivant qui va créer deux instances numpy.ndarray que vous pouvez facilement afficher ou écrire dans de nouveaux fichiers.

from scipy import misc 

# Read the image 
img = misc.imread("face.png") 
height, width, _ = img.shape 

# Cut the image in half 
width_cutoff = width // 2 
s1 = img[:, :width_cutoff, :] 
s2 = img[:, width_cutoff:, :] 

# Save each half 
misc.imsave("face1.png", s1) 
misc.imsave("face2.png", s2) 

Le fichier face.png est un exemple et doit être remplacé par votre propre fichier image.

+0

Merci pour la réponse. La seule chose dont je me suis débarrassé est la troisième variable/index sur la ligne: 'height, width, _ = img.shape',' s1 = img [:,: largeur_cutoff,:] 'et' s2 = img [:, width_cutoff :,:] 'Puisqu'une image est 2D et le programme m'a donné une erreur jusqu'à ce que je les ai enlevés. – Halp

+0

J'ai aussi essayé d'utiliser 'width = len (img [0])' pour voir si la largeur serait plus rapide juste au cas où le nombre soit nul. Timeit Times: Numpy Épissage: '0.18052252247208658' len():' 0.2773668664358264' – Halp