Это мое решение:
function resolve(path, obj) {
return path.split('.').reduce(function(prev, curr) {
return prev ? prev[curr] : null
}, obj || self)
}
Примеры использования:
resolve("document.body.style.width")
// or
resolve("style.width", document.body)
// or even use array indexes
// (someObject has been defined in the question)
resolve("part.0.size", someObject)
// returns null when intermediate properties are not defined:
resolve('properties.that.do.not.exist', {hello:'world'})
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
Первоначально я думал, что использование [:2]
было в порядке, но форма numpy (height, width[, depth])
, и нам нужно (width, height)
, как, например, cv2.resize
ожидает, поэтому - мы должны использовать [1::-1]
. Еще менее запоминающимся, чем [:2]
. А кто помнит обратную резку?
img.shape[:2][::-1]
– billyjmc
29 October 2015 в 04:35
h, w = img.shape[:2]
, тем более, что OP не интересуется глубиной. (Я тоже). См. Мой ответ для более подробной информации. – Tomasz Gandor 10 January 2015 в 00:46