python cv2 write image
El contenedor Python opencv2(cv2) obtiene el tamaƱo de imagen? (2)
Cómo obtener el tamaño de la imagen en el contenedor cv2
en Python OpenCV (numpy). ¿Hay una manera correcta de hacer eso que numpy.shape()
. ¿Cómo obtenerlo en dimensiones de formato: (ancho, alto)?
Gracias
Me temo que no hay una "mejor" forma de obtener este tamaño, sin embargo, no es tanto dolor.
Por supuesto, su código debe ser seguro tanto para las imágenes binarias / mono como para las multicanal, pero las dimensiones principales de la imagen siempre aparecen primero en la forma de la matriz numpy. Si opta por la legibilidad, o no quiere molestarse en escribir esto, puede resumirlo en una función y darle el nombre que desee, por ejemplo, cv_size
:
import numpy as np
import cv2
# ...
def cv_size(img):
return tuple(img.shape[1::-1])
Si estás en un terminal / ipython, también puedes expresarlo con un lambda:
>>> cv_size = lambda img: tuple(img.shape[1::-1])
>>> cv_size(img)
(640, 480)
Escribir funciones con def
no es divertido mientras trabajas de forma interactiva.
Editar
Originalmente pensé que usar [:2]
estaba bien, pero la forma numpy es (height, width[, depth])
, y necesitamos (width, height)
, como por ejemplo cv2.resize
, así que debemos usar [1::-1]
. Aún menos memorable que [:2]
. ¿Y quién recuerda cortar en reversa de todos modos?
cv2
usa numpy
para manipular imágenes, por lo que la mejor forma de obtener el tamaño de una imagen es usar numpy.shape
. Suponiendo que está trabajando con imágenes BGR, aquí hay un ejemplo:
>>> import numpy as np
>>> import cv2
>>> img = cv2.imread(''foo.jpg'')
>>> height, width, channels = img.shape
>>> print height, width, channels
600 800 3
En caso de que esté trabajando con imágenes binarias, img
tendrá dos dimensiones y, por lo tanto, debe cambiar el código a: height, width = img.shape