I temo che non ci sia un modo "migliore" per ottenere questa taglia, tuttavia non è tanto dolore.
Ovviamente il codice deve essere sicuro sia per le immagini binarie/mono che per quelle multicanale, ma le dimensioni principali dell'immagine vengono sempre prima nella forma della serie numpy. Se si opta per la leggibilità o non si vuole preoccuparsi di digitare questo, è possibile includerlo in una funzione e assegnargli un nome che si desidera, ad es. cv_size
:
import numpy as np
import cv2
# ...
def cv_size(img):
return tuple(img.shape[1::-1])
Se siete su un terminale/ipython, è anche possibile esprimere con un lambda:
>>> cv_size = lambda img: tuple(img.shape[1::-1])
>>> cv_size(img)
(640, 480)
funzioni di scrittura con def
non è divertente mentre si lavora in modo interattivo.
Modifica
Originariamente ho pensato che l'utilizzo di [:2]
era OK, ma la forma è NumPy (height, width[, depth])
, e abbiamo bisogno (width, height)
, come ad esempio cv2.resize
si aspetta, quindi, dobbiamo usare [1::-1]
. Ancora meno memorabile di [:2]
. E chi ricorda comunque l'affettamento inverso?
fonte
2015-01-09 23:40:48
'numpy.shape' non è richiamabile. È solo una semplice "tupla". Sfortunatamente, può essere lungo 3 o 2 elementi. –