Jer*_*ome 5 python python-imaging-library
我有一个图像存储在numpy数组中,我想将其转换PIL.Image为执行仅适用于PIL的插值。
当尝试通过Image.fromarray()它进行转换时,会引发以下错误:
TypeError:无法处理此数据类型
我要运行的是:
from PIL import Image
x # a numpy array representing an image, shape: (256, 256, 3)
Image.fromarray(x)
Run Code Online (Sandbox Code Playgroud)
Uzz*_*der 27
我解决了它。
问题情况:
当处理灰度图像或二值图像时,如果 numpy 数组形状为(height, width, 1),也会引发此错误。
例如,32 x 32 像素的灰度图像(值 0 到 255)
np_img = np.random.randint(low=0, high=255, size=(32, 32, 1), dtype=np.uint8)
# np_img.shape == (32, 32, 1)
pil_img = Image.fromarray(np_img)
Run Code Online (Sandbox Code Playgroud)
将提高TypeError: Cannot handle this data type: (1, 1, 1), |u1
如果图像形状为(32, 32, 1),则将尺寸减少为(32, 32)
np_img = np.squeeze(np_img, axis=2) # axis=2 is channel dimension
pil_img = Image.fromarray(np_img)
Run Code Online (Sandbox Code Playgroud)
这次成功了!!
此外,请确保是dtype(uint8对于灰色)或bool(对于二进制)。
Dji*_*011 10
是否x包含uint[0,255]中的值?如果不是,特别是如果x范围从0到1,这就是错误的原因。
大多数图像库(例如matplotlib,opencv,scikit-image)都有两种表示图像的方式:
uint介于0到255之间的值。float值的范围从0到1。当在图像之间执行操作时,后者更方便,因此在计算机视觉领域更受欢迎。但是,PIL似乎不支持RGB图像。
如果你看一看这里
看来,当您尝试从一个阵列读取的图像,如果阵列具有的形状(height, width, 3),它会自动假定它是RGB图像,并希望它有一个dtype的uint8!但是,根据您的情况,您有一个RBG图像,其float值从0到1。
您可以通过将图像转换为PIL期望的格式来修复它:
im = Image.fromarray((x * 255).astype(np.uint8))
Run Code Online (Sandbox Code Playgroud)
小智 9
就我而言,这只是因为我忘记在“fromarray”函数中添加“RGB”参数。
pil_img = Image.fromarray(np_img, 'RGB')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3179 次 |
| 最近记录: |