Wie bekomme ich die Bildgröße in cv2
- Wrapper in Python OpenCV (numpy). Gibt es eine richtige Möglichkeit, dies zu tun als numpy.shape()
. Wie bekomme ich es in format abmessungen: (breite, höhe) liste?
Vielen Dank
cv2
Verwendet numpy
für die Bearbeitung von Bildern. Die richtige und beste Methode, um die Größe eines Bildes zu ermitteln, ist numpy.shape
. Angenommen, Sie arbeiten mit BGR-Bildern. Hier ein Beispiel:
>>> import numpy as np
>>> import cv2
>>> img = cv2.imread('foo.jpg')
>>> height, width, channels = img.shape
>>> print height, width, channels
600 800 3
Wenn Sie mit Binärbildern gearbeitet haben, hat img
zwei Dimensionen. Daher müssen Sie den Code in height, width = img.shape
Ändern.
Ich fürchte, es gibt keinen "besseren" Weg, um diese Größe zu bekommen, aber es ist nicht so viel Schmerz.
Natürlich sollte Ihr Code sowohl für Binär-/Monobilder als auch für Mehrkanalbilder sicher sein, aber die Hauptabmessungen des Bildes stehen bei der Form des Numpy-Arrays immer an erster Stelle. Wenn Sie sich für die Lesbarkeit entscheiden oder diese nicht eingeben möchten, können Sie sie in eine Funktion einschließen und ihr einen Namen geben, der Ihnen gefällt, z. cv_size
:
import numpy as np
import cv2
# ...
def cv_size(img):
return Tuple(img.shape[1::-1])
Wenn Sie sich auf einem Terminal/Ipython befinden, können Sie es auch mit einem Lambda ausdrücken:
>>> cv_size = lambda img: Tuple(img.shape[1::-1])
>>> cv_size(img)
(640, 480)
Das Schreiben von Funktionen mit def
macht beim interaktiven Arbeiten keinen Spaß.
Bearbeiten
Ursprünglich dachte ich, dass die Verwendung von [:2]
In Ordnung war, aber die Zahlenform ist (height, width[, depth])
, Und wir brauchen (width, height)
, Wie z. cv2.resize
Erwartet also - wir müssen [1::-1]
Verwenden. Noch weniger einprägsam als [:2]
. Und wer erinnert sich schon an das Rückwärtsschneiden?