wake-up-neo.com

Python opencv2 (cv2) wrapper Bildgröße erhalten?

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

80
xercool

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.

167
jabaldonedo

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?

18
Tomasz Gandor