Как получить размер изображения в оболочке cv2
в Python OpenCV (numpy). Есть ли правильный способ сделать это, чем numpy.shape()
. Как получить его в формате формата: (ширина, высота)?
Спасибо
Как получить размер изображения в оболочке cv2
в Python OpenCV (numpy). Есть ли правильный способ сделать это, чем numpy.shape()
. Как получить его в формате формата: (ширина, высота)?
Спасибо
cv2
использует numpy
для управления изображениями, поэтому правильный и лучший способ получить размер изображения использует numpy.shape
. Предполагая, что вы работаете с изображениями BGR, вот пример:
>>> import numpy as np
>>> import cv2
>>> img = cv2.imread('foo.jpg')
>>> height, width, channels = img.shape
>>> print height, width, channels
600 800 3
Если вы работаете с двоичными изображениями, img
будет иметь два измерения, и поэтому вы должны изменить код на: height, width = img.shape
Я боюсь, что нет "лучшего" способа получить этот размер, однако это не так уж больно.
Конечно, ваш код должен быть безопасным как для двоичных/монофонических изображений, так и для многоканальных, но основные размеры изображения всегда будут первыми в форме массива numpy. Если вы выбираете читабельность или не хотите вводить это, вы можете обернуть ее в функцию и дать ей имя, которое вам нравится, например. cv_size
:
import numpy as np
import cv2
# ...
def cv_size(img):
return tuple(img.shape[1::-1])
Если вы используете терминал /ipython, вы также можете выразить его с помощью лямбда:
>>> cv_size = lambda img: tuple(img.shape[1::-1])
>>> cv_size(img)
(640, 480)
Функции записи с помощью def
не являются приятными при работе в интерактивном режиме.
Edit
Первоначально я думал, что использование [:2]
было в порядке, но форма numpy (height, width[, depth])
, и нам нужно (width, height)
, например. cv2.resize
ожидает, поэтому - мы должны использовать [1::-1]
. Еще менее запоминающимся, чем [:2]
. И кто все-таки помнит обратную резку?