2 ответов:
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]. И кто вообще помнит обратное нарезание?
Comments