не может открыть изображение, вставленное в другое изображение [дубликат]

Это мое решение:

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'})
54
задан jabaldonedo 30 September 2013 в 17:00
поделиться

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

117
ответ дан djwbrown 20 August 2018 в 15:22
поделиться
  • 1
    О, да ладно. Вместо того, чтобы предполагать, что изображение будет BGR или моно, просто напишите вообще - h, w = img.shape[:2], тем более, что OP не интересуется глубиной. (Я тоже). См. Мой ответ для более подробной информации. – Tomasz Gandor 10 January 2015 в 00:46
  • 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

Первоначально я думал, что использование [:2] было в порядке, но форма numpy (height, width[, depth]), и нам нужно (width, height), как, например, cv2.resize ожидает, поэтому - мы должны использовать [1::-1]. Еще менее запоминающимся, чем [:2]. А кто помнит обратную резку?

10
ответ дан Tomasz Gandor 20 August 2018 в 15:22
поделиться
  • 1
    Может быть, не очень полезно, но вы также можете нарезать его как img.shape[:2][::-1] – billyjmc 29 October 2015 в 04:35
  • 2
    Нет причин, по которым вы должны быть влюблены в двоеточия в ваших указательных скобках. return (image.shape [1], image.shape [0]) является кратким и читаемым. – mcduffee 26 March 2017 в 14:14
Другие вопросы по тегам:

Похожие вопросы: