Jak uzyskać rozmiar obrazu w opakowaniu cv2
w języku Python OpenCV (numpy). Czy jest to prawidłowy sposób niż numpy.shape()
. Jak zdobyć go w formacie: lista (szerokość, wysokość)?Opakowanie Python opencv2 (cv2) ma rozmiar obrazu?
Dzięki
Jak uzyskać rozmiar obrazu w opakowaniu cv2
w języku Python OpenCV (numpy). Czy jest to prawidłowy sposób niż numpy.shape()
. Jak zdobyć go w formacie: lista (szerokość, wysokość)?Opakowanie Python opencv2 (cv2) ma rozmiar obrazu?
Dzięki
cv2
wykorzystuje numpy
do manipulowania obrazy, więc właściwy i najlepszy sposób, aby uzyskać rozmiar obrazu wykorzystuje numpy.shape
. Zakładając, że pracują z obrazami BGR, oto przykład:
>>> import numpy as np
>>> import cv2
>>> img = cv2.imread('foo.jpg')
>>> height, width, channels = img.shape
>>> print height, width, channels
600 800 3
W przypadku, gdy pracowali z obrazów binarnych, img
będzie miała dwa wymiary, a zatem należy zmienić kod w celu: height, width = img.shape
Och, daj spokój. Zamiast zakładać, że obraz będzie BGR lub mono, po prostu napisz ogólnie - 'h, w = img.shape [: 2]', zwłaszcza, że OP nie jest zainteresowany głębią. (Ja również nie). Zobacz moją odpowiedź, aby uzyskać więcej informacji. –
Uważam, że jest to pomocne: http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_core/py_basic_ops/py_basic_ops.html#accessing-image-properties – djwbrown
I "obawiam się, że nie ma" lepszego "sposobu na uzyskanie tego rozmiaru, ale to nie tyle ból.
Oczywiście kod powinien być bezpieczny zarówno dla obrazów binarnych/mono, jak i wielokanałowych, ale główne wymiary obrazu są zawsze pierwsze w kształcie tablicy numpy. Jeśli zdecydujesz się na czytelność lub nie chcesz, aby to wpisywać, możesz zawinąć je w funkcję i nadać mu nazwę, którą chcesz, np. cv_size
:
import numpy as np
import cv2
# ...
def cv_size(img):
return tuple(img.shape[1::-1])
Jeśli jesteś na terminalu/ipython można również wyrazić za pomocą lambda:
>>> cv_size = lambda img: tuple(img.shape[1::-1])
>>> cv_size(img)
(640, 480)
funkcje pisanie def
nie jest zabawa podczas pracy interaktywnie.
Edit
Początkowo myślałem, że za pomocą [:2]
było OK, ale numpy kształt jest (height, width[, depth])
i musimy (width, height)
, jak na przykład cv2.resize
oczekuje, więc - musimy użyć [1::-1]
. Jeszcze mniej niezapomniany niż [:2]
. I kto pamięta zresztą odwrotne cięcie?
'numpy.shape' nie jest wywoływalny. To zwykła "krotka". Niestety, może mieć długość 3 lub 2 elementów. –