PIL TypeError: Cannot handle this data type - depend on image size
PIL TypeError: Cannot handle this data type - depend on image size
LEVIR-CD中的原始图像大小为1024 * 1024,训练时会占用太多内存。因此,需要将原始图像切割成更小的块。
当图像数据集包含大小为 1024x1024 的 png 格式的图像时,下面的代码不会 return 错误,如果我将图像裁剪成 16 个部分 (256x256px),则此代码 return 会出错
tmp = np.array(Image.open(L_path), dtype=np.uint32)/255
L_img = Image.fromarray(tmp)
错误
L_img = Image.fromarray(tmp)
File "/usr/lib64/python3.6/dist-packages/PIL/Image.py", line 2766, in fromarray
raise TypeError("Cannot handle this data type: %s, %s" % typekey) from e
TypeError: Cannot handle this data type: (1, 1, 3), <f8
图像样本 -(原始图像的左下角)
原始图像样本
按照此答案中所述解决此问题
我修正错误:
L_img = Image.fromarray(tmp.astype(np.uint8))
此处描述的完整代码at STANet project Github page
pip3 导入库版本:
Pillow 8.1.0
numpy 1.19.5
我误解了图像大小如何改变函数行为。如果有人能解释一下,我将不胜感激。
UPDATE:据我了解,它取决于图像的位深度。原始图像 8 位,但裁剪图像为 24 位 png。 这点我没注意,不过问题已经解决了
据我了解,这取决于图像的位深度。原始图像 8 位,但裁剪图像为 24 位 png
LEVIR-CD中的原始图像大小为1024 * 1024,训练时会占用太多内存。因此,需要将原始图像切割成更小的块。
当图像数据集包含大小为 1024x1024 的 png 格式的图像时,下面的代码不会 return 错误,如果我将图像裁剪成 16 个部分 (256x256px),则此代码 return 会出错
tmp = np.array(Image.open(L_path), dtype=np.uint32)/255
L_img = Image.fromarray(tmp)
错误
L_img = Image.fromarray(tmp) File "/usr/lib64/python3.6/dist-packages/PIL/Image.py", line 2766, in fromarray raise TypeError("Cannot handle this data type: %s, %s" % typekey) from e TypeError: Cannot handle this data type: (1, 1, 3), <f8
图像样本 -(原始图像的左下角)
原始图像样本
按照此答案中所述解决此问题
我修正错误:
L_img = Image.fromarray(tmp.astype(np.uint8))
此处描述的完整代码at STANet project Github page
pip3 导入库版本:
Pillow 8.1.0
numpy 1.19.5
我误解了图像大小如何改变函数行为。如果有人能解释一下,我将不胜感激。
UPDATE:据我了解,它取决于图像的位深度。原始图像 8 位,但裁剪图像为 24 位 png。 这点我没注意,不过问题已经解决了
据我了解,这取决于图像的位深度。原始图像 8 位,但裁剪图像为 24 位 png