我正在用Python运行图像分类任务。作为预处理的一部分,我需要将所有图像重塑为相同的尺寸。通过这样做,我注意到一些jpeg和png具有三维尺寸的特性,而有些则没有。为什么会这样呢?如何规范数据?
这些图像都是彩色图像,即使将图像下载到计算机上,也可以得到相同的形状。
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)
如您所见,有时第三维不存在,有时即使存在,也不是一致的数字。
答案 0 :(得分:3)
如果您将这些图像下载到计算机上,然后查看图像详细信息,您会发现它们的“颜色”(通道)数和大小不同。 有一些编程方式可以做到这一点,但是如果您使用的是Windows,则可以右键单击然后选择“详细信息”。
图片“ https://c7.uihere.com/files/35/692/872/wikimedia-commons-measuring-scales-clip-art-orthodontist-thumb.jpg” 是一张310 x 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是“ alpha”通道,通常用于描述不透明度/透明度级别)。
因此,基本上,您在输出中看到的所有数据似乎都是正确的,在这里我看不到任何问题。 (注意-我不介意看看您的第四种情况-原始数据图像)