Comment obtenir la taille d'une image dans un cv2
wrapper en Python OpenCV (numpy). Y a-t-il une manière correcte de faire cela autre que numpy.shape()
. Comment puis-je l'obtenir dans ces formats de dimensions: (largeur, hauteur) liste?
97
numpy.shape
n'est pas appelable. C'est juste une plainetuple
. Malheureusement, il peut être long de 3 ou 2 éléments.Réponses:
cv2
utilisenumpy
pour manipuler les images, donc la meilleure et la meilleure façon d'obtenir la taille d'une image est d'utilisernumpy.shape
. En supposant que vous travaillez avec des images BGR, voici un exemple:Dans le cas où vous travailliez avec des images binaires,
img
aura deux dimensions, et vous devez donc changer le code en:height, width = img.shape
la source
h, w = img.shape[:2]
, d'autant plus que l'OP n'est pas intéressé par la profondeur. (Moi non plus). Voir ma réponse pour plus de détails.J'ai peur qu'il n'y ait pas de «meilleure» façon d'obtenir cette taille, mais ce n'est pas si douloureux.
Bien sûr, votre code doit être sûr pour les images binaires / mono ainsi que pour les images multi-canaux, mais les principales dimensions de l'image viennent toujours en premier dans la forme du tableau numpy. Si vous optez pour la lisibilité, ou si vous ne voulez pas vous donner la peine de taper ceci, vous pouvez l'envelopper dans une fonction et lui donner un nom que vous aimez, par exemple
cv_size
:Si vous êtes sur un terminal / ipython, vous pouvez également l'exprimer avec un lambda:
Écrire des fonctions avec
def
n'est pas amusant tout en travaillant de manière interactive.Éditer
À l'origine, je pensais que l'utilisation
[:2]
était OK, mais la forme numpy l'est(height, width[, depth])
, et nous avons besoin(width, height)
, comme par exemple,cv2.resize
attend, donc - nous devons utiliser[1::-1]
. Encore moins mémorable que[:2]
. Et qui se souvient du tranchage inversé de toute façon?la source
img.shape[:2][::-1]