PIL TypeError:无法处理此数据类型 - 取决于图像大小

Posted

技术标签:

【中文标题】PIL TypeError:无法处理此数据类型 - 取决于图像大小【英文标题】:PIL TypeError: Cannot handle this data type - depend on image size 【发布时间】:2021-03-20 17:14:28 【问题描述】:

LEVIR-CD中的原始图像大小为1024 * 1024,训练时会消耗过多的内存。因此,需要将原始图像切割成更小的块。

当图像数据集包含尺寸为 1024x1024 的 png 格式的图像时,下面的代码不会返回错误,如果我将图像裁剪成 16 部分(256x256px),则此代码会返回错误

tmp = np.array(Image.open(L_path), dtype=np.uint32)/255
L_img = Image.fromarray(tmp)

错误

L_img = Image.fromarray(tmp) 文件“/usr/lib64/python3.6/dist-packages/PIL/Image.py”,第 2766 行,在 fromarray raise TypeError("Cannot handle this data type: %s, %s" % typekey) from e TypeError:无法处理此数据类型:(1, 1, 3),

图像样本 - (原始图像的左下角)

原图样本

按照此答案PIL TypeError: Cannot handle this data type question answer 中的描述解决此问题

我修复错误:

L_img = Image.fromarray(tmp.astype(np.uint8))

此处描述的完整代码at STANet project Github page

pip3 导入的库版本:

枕头 8.1.0

numpy 1.19.5

我误解了图像大小如何改变函数行为。如果有人能解释一下,我将不胜感激。

更新:据我了解,它取决于图像的位深度。原始图像 8 位,但裁剪后的图像是 24 位 png。 这点我没注意,不过问题已经解决了。

【问题讨论】:

我不太清楚你在做什么。你能放回import 语句和代码来砍掉你删除的图像吗?并且还提供原始图像而不是切碎的图像。我猜你的数据类型和范围有问题。谢谢。 @MarkSetchell 据我了解,它取决于图像的位深度。原始图像 8 位,但裁剪后的图像是 24 位 png。我没有注意这一点,但问题已经解决了。感谢您的建议和关注 如果您自己解决了问题,请添加自己的答案并接受。或者,如果您在其他问题中找到了解决方案,请将您的问题标记为重复。因此,人们已经从概述中知道,您不需要任何进一步的帮助(相应标记的问题)。 【参考方案1】:

据我了解,这取决于图像的位深度。原始图像 8 位,但裁剪后的图像是 24 位 png

【讨论】:

以上是关于PIL TypeError:无法处理此数据类型 - 取决于图像大小的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:“图像”对象不能使用 PIL 进行下标

Python - 重复数据删除问题:TypeError:不可散列的类型:'numpy.ndarray'

TypeError:无法将“4”解释为数据类型

Python - 尝试使用 PIL 的 Image.fromarray 保存 numpy 数组时出现 TypeError

UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“类型”

TypeError [ERR_INVALID_ARG_TYPE]:“ path”参数必须为字符串Node.JS类型