Если вы также хотите узнать количество каналов, вы должны использовать im.mode. Поскольку PIL немного загадочен, вы также можете использовать numpy:numpy.array(im).shape
Alex
9
Обратите внимание на @AlexKreimer, который при использовании .shapeприводит к разным возвращениям, так как высота - это сначала массив 2d, а затем ширина. Поэтомуheight, width = np.array(im).shape
Джек Хейлз
Пожалуйста, используйте with.
Шиталь Шах
@AlexKreimer: np.array(im).shapeНЕ возвращает количество каналов, скорее возвращает heightи width!
Ферид Алиджани
@ FäridAlijani уверен, он возвращает форму тензора, который (возможно) включает в себя количество каналов. Если вы получаете только 2 димма, это, вероятно, означает, что количество каналов равно 1.
Алекс Креймер
77
Вы можете использовать подушку ( сайт , документация , GitHub , PyPI ). Подушка имеет тот же интерфейс, что и PIL, но работает с Python 3.
Монтаж
$ pip install Pillow
Если у вас нет прав администратора (sudo в Debian), вы можете использовать
from PIL importImagewithImage.open(filepath)as img:
width, height = img.size
скорость
Это потребовало 3,21 секунды для 30336 изображений (файлы JPG от 31x21 до 424x428, данные обучения от National Data Science Bowl на Kaggle)
Это, наверное, самая важная причина, чтобы использовать подушку вместо чего-то написанного самим собой. И вам следует использовать Pillow вместо PIL (python-imaging), потому что он работает с Python 3.
Альтернатива № 1: Numpy (не рекомендуется)
Я держу, scipy.ndimage.imreadпоскольку информация все еще там, но имейте в виду:
imread устарела! imread устарела в SciPy 1.0.0 и [была] удалена в 1.2.0.
Вот как вы получаете размер изображения по указанному URL в 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
Ответы:
Согласно документации .
источник
im.mode
. Поскольку PIL немного загадочен, вы также можете использовать numpy:numpy.array(im).shape
.shape
приводит к разным возвращениям, так как высота - это сначала массив 2d, а затем ширина. Поэтомуheight, width = np.array(im).shape
with
.np.array(im).shape
НЕ возвращает количество каналов, скорее возвращаетheight
иwidth
!Вы можете использовать подушку ( сайт , документация , GitHub , PyPI ). Подушка имеет тот же интерфейс, что и PIL, но работает с Python 3.
Монтаж
Если у вас нет прав администратора (sudo в Debian), вы можете использовать
Другие замечания относительно установки здесь .
Код
скорость
Это потребовало 3,21 секунды для 30336 изображений (файлы JPG от 31x21 до 424x428, данные обучения от National Data Science Bowl на Kaggle)
Это, наверное, самая важная причина, чтобы использовать подушку вместо чего-то написанного самим собой. И вам следует использовать Pillow вместо PIL (python-imaging), потому что он работает с Python 3.
Альтернатива № 1: Numpy (не рекомендуется)
Я держу,
scipy.ndimage.imread
поскольку информация все еще там, но имейте в виду:Альтернатива № 2: Pygame
источник
Image.open(filepath)
быстрее , чемcv2.imread(filepath)
метод?Поскольку
scipy
«simread
является устаревшим, использованиеimageio.imread
.pip install imageio
height, width, channels = imageio.imread(filepath).shape
источник
Это полный пример загрузки изображения из URL, создания с помощью PIL, печати размера и изменения размера ...
источник
Вот как вы получаете размер изображения по указанному URL в Python 3:
источник
Ниже приведены размеры, а также каналы:
источник