Si también desea saber la cantidad de canales, debe usar im.mode. Como PIL es un poco críptico, también puedes usar numpy:numpy.array(im).shape
Alex Kreimer
9
Tenga en cuenta @AlexKreimer que el uso de .shaperesultados en diferentes retornos ya que la altura es el primero de la matriz 2d, luego el ancho. Por lo tantoheight, width = np.array(im).shape
Jack Hales
Por favor use with.
Shital Shah
@AlexKreimer: np.array(im).shapeNO devuelve el número de canales, sino que devuelve heighty width!
Färid Alijani
@ FäridAlijani seguro, devuelve la forma de un tensor, que (posiblemente) incluye el número de canales. Si solo obtienes 2 dims, probablemente significa que la cantidad de canales es 1.
Alex Kreimer
77
Puede usar Pillow ( sitio web , documentación , GitHub , PyPI ). Pillow tiene la misma interfaz que PIL, pero funciona con Python 3.
Instalación
$ pip install Pillow
Si no tiene derechos de administrador (sudo en Debian), puede usar
from PIL importImagewithImage.open(filepath)as img:
width, height = img.size
Velocidad
Esto necesitó 3.21 segundos para 30336 imágenes (JPG de 31x21 a 424x428, datos de entrenamiento del National Data Science Bowl en Kaggle)
Esta es probablemente la razón más importante para usar Pillow en lugar de algo escrito por uno mismo. Y debe usar Pillow en lugar de PIL (python-imaging), porque funciona con Python 3.
Alternativa # 1: Numpy (en desuso)
Mantengo scipy.ndimage.imreadque la información aún está disponible, pero tenga en cuenta:
¡iread está en desuso! imread está en desuso en SciPy 1.0.0, y [fue] eliminado en 1.2.0.
Así es como obtienes el tamaño de la imagen de la URL dada en Python 3:
from PIL importImageimport urllib.request
from io importBytesIO
file =BytesIO(urllib.request.urlopen('http://getwallpapers.com/wallpaper/full/b/8/d/32803.jpg').read())
im =Image.open(file)
width, height = im.size
Respuestas:
De acuerdo con la documentación .
fuente
im.mode
. Como PIL es un poco críptico, también puedes usar numpy:numpy.array(im).shape
.shape
resultados en diferentes retornos ya que la altura es el primero de la matriz 2d, luego el ancho. Por lo tantoheight, width = np.array(im).shape
with
.np.array(im).shape
NO devuelve el número de canales, sino que devuelveheight
ywidth
!Puede usar Pillow ( sitio web , documentación , GitHub , PyPI ). Pillow tiene la misma interfaz que PIL, pero funciona con Python 3.
Instalación
Si no tiene derechos de administrador (sudo en Debian), puede usar
Otras notas sobre la instalación están aquí .
Código
Velocidad
Esto necesitó 3.21 segundos para 30336 imágenes (JPG de 31x21 a 424x428, datos de entrenamiento del National Data Science Bowl en Kaggle)
Esta es probablemente la razón más importante para usar Pillow en lugar de algo escrito por uno mismo. Y debe usar Pillow en lugar de PIL (python-imaging), porque funciona con Python 3.
Alternativa # 1: Numpy (en desuso)
Mantengo
scipy.ndimage.imread
que la información aún está disponible, pero tenga en cuenta:Alternativa # 2: Pygame
fuente
Image.open(filepath)
más rápido que elcv2.imread(filepath)
método?Como
scipy
'simread
está en desuso, useimageio.imread
.pip install imageio
height, width, channels = imageio.imread(filepath).shape
fuente
Este es un ejemplo completo de carga de imágenes desde URL, creación con PIL, impresión del tamaño y cambio de tamaño ...
fuente
Así es como obtienes el tamaño de la imagen de la URL dada en Python 3:
fuente
Los siguientes dan dimensiones y canales:
fuente