Несоответствие в наличии третьего измерения изображений - PullRequest
0 голосов
/ 01 января 2019

Я выполняю задачу классификации изображений в Python.В рамках предварительной обработки мне нужно изменить все изображения в одинаковые размеры.Делая это, я заметил особенность того, что некоторые jpegs и pngs имеют третье измерение, а некоторые нет.Почему это так?Как мне продвинуться в плане нормализации данных?

Все изображения являются цветными изображениями, и даже если я загружаю изображения на свой компьютер, я получаю одинаковые формы.

from PIL import Image
import requests
from io import BytesIO
import base64
import numpy as np 

for url in [
    r'https://c7.uihere.com/files/35/692/872/wikimedia-commons-measuring-scales-clip-art-orthodontist-thumb.jpg',
    r'https://thedesignlove.com/wp-content/uploads/2018/02/297-Food-Stop-Logo-Template.jpg',
    r'https://upload.wikimedia.org/wikipedia/commons/f/ff/BTS_logo_%282017%29.png',    
    ]:
    response = requests.get(url)
    img = Image.open(BytesIO(response.content))

    print(np.asarray(img).shape)


data = '''R0lGODlhDwAPAKECAAAAzMzM/////wAAACwAAAAADwAPAAACIISPeQHsrZ5ModrLlN48CXF8m2iQ3YmmKqVlRtW4MLwWACH+H09wdGltaXplZCBieSBVbGVhZCBTbWFydFNhdmVyIQAAOw==''' 

img = Image.open(BytesIO(base64.b64decode(data)))
print(np.asarray(img).shape)

Вывод:

(310, 310) 
(600, 650, 3) 
(1800, 1800, 4) 
(15, 15)

Как видите, иногда третьего измерения нет, а иногда, даже когда оно есть, оно не является последовательным числом.

1 Ответ

0 голосов
/ 01 января 2019

Если вы загрузите эти изображения на свой компьютер и взгляните на детали изображения, вы увидите, что их «цвета» (каналы) и размеры различаются.Есть программные способы сделать это, но если вы находитесь в Windows, вы можете просто щелкнуть правой кнопкой мыши и затем выбрать «детали».

Изображение «https://c7.uihere.com/files/35/692/872/wikimedia-commons-measuring-scales-clip-art-orthodontist-thumb.jpg" представляет собой одиночный файл 310 х 310канальное (8-битное) изображение.

Изображение "https://thedesignlove.com/wp-content/uploads/2018/02/297-Food-Stop-Logo-Template.jpg" представляет собой изображение 650x600 с 3 каналами (24 бита).

изображение" https://upload.wikimedia.org/wikipedia/commons/f/ff/BTS_logo_%282017%29.png", по-видимому,быть 1800x1800 4-канальное (32-битное) изображение. Возможно в формате RGBA (A - это «альфа-канал», обычно используемый для описания уровня непрозрачности / прозрачности).

Таким образом, в основном, все данные, которые вы видите как выходныекажется правильным, я не вижу здесь никакой проблемы (обратите внимание - я не удосужился взглянуть на ваш четвертый случай - изображение необработанных данных)

...