Подтвердить что ты не робот

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

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

Спасибо

4b9b3361

Ответ 1

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

Ответ 2

Я боюсь, что нет "лучшего" способа получить этот размер, однако это не так уж больно.

Конечно, ваш код должен быть безопасным как для двоичных/монофонических изображений, так и для многоканальных, но основные размеры изображения всегда будут первыми в форме массива 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]. И кто все-таки помнит обратную резку?