Python opencv2 (cv2) обертка получить размер изображения?



Как получить размер изображения в cv2 обертка в Python OpenCV (numpy). Есть ли правильный способ сделать это, чем numpy.shape(). Как получить его в формате размеры: (ширина, высота) список?



спасибо

976   2  

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

    Ничего не найдено.