RGB 数组转 PIL 图像
RGB array to PIL image
我有一个 rgb 元组数组
array = [(144, 144, 133), (85, 87, 75), (140, 87, 70), (129, 107, 105), (129, 107, 105), (194, 179, 171), (178, 164, 159), (100, 105, 122), (36, 38, 57), (59, 48, 49), (59, 48, 49), (152, 149,
148), (152, 149, 148), (0, 0, 0), (0, 0, 0), (98, 81, 84)...]
我想制作一个正方形并更改为 PIL 图片。
dt = np.dtype('int,int,int')
array2d = np.array(array, dt)
im_pil = Image.fromarray(obj=array2d.reshape(int(math.sqrt(size)), int(math.sqrt(size))), mode='RGB')
data = io.BytesIO()
im_pil.save(data, "bmp")
由于某些我不知道的原因,它将每个数字分开,例如(144,144,133) -> (144,0,0), (0,144,0), (0,0,133), (0,0,0)
我的问题是初始数组的形状吗?还是围绕它的修改?
有任何想法吗?当然我试过 np.array(array, np.uint8) 同样的问题
提前致谢。
我相信,我们的问题出在你的 reshape 函数上。您将数组重塑为形状为 [sqrt(size),sqrt(size)]
的二维数组。您需要的是一个形状为 [sqrt(size),sqrt(size),3]
(x 维度,y 维度,3 个 RGB 值)的 3d 数组。
要解决你的问题你应该这样做
im_pil = Image.fromarray(obj=array2d.reshape(int(math.sqrt(size)), int(math.sqrt(size)),3), mode='RGB')
而不是这个:
im_pil = Image.fromarray(obj=array2d.reshape(int(math.sqrt(size)), int(math.sqrt(size))), mode='RGB')
试试这个:
arr3d = arr.reshape(2,3,2)
Image.fromarray(arr3d,'RGB').show()
我有一个 rgb 元组数组
array = [(144, 144, 133), (85, 87, 75), (140, 87, 70), (129, 107, 105), (129, 107, 105), (194, 179, 171), (178, 164, 159), (100, 105, 122), (36, 38, 57), (59, 48, 49), (59, 48, 49), (152, 149,
148), (152, 149, 148), (0, 0, 0), (0, 0, 0), (98, 81, 84)...]
我想制作一个正方形并更改为 PIL 图片。
dt = np.dtype('int,int,int')
array2d = np.array(array, dt)
im_pil = Image.fromarray(obj=array2d.reshape(int(math.sqrt(size)), int(math.sqrt(size))), mode='RGB')
data = io.BytesIO()
im_pil.save(data, "bmp")
由于某些我不知道的原因,它将每个数字分开,例如(144,144,133) -> (144,0,0), (0,144,0), (0,0,133), (0,0,0)
我的问题是初始数组的形状吗?还是围绕它的修改? 有任何想法吗?当然我试过 np.array(array, np.uint8) 同样的问题
提前致谢。
我相信,我们的问题出在你的 reshape 函数上。您将数组重塑为形状为 [sqrt(size),sqrt(size)]
的二维数组。您需要的是一个形状为 [sqrt(size),sqrt(size),3]
(x 维度,y 维度,3 个 RGB 值)的 3d 数组。
要解决你的问题你应该这样做
im_pil = Image.fromarray(obj=array2d.reshape(int(math.sqrt(size)), int(math.sqrt(size)),3), mode='RGB')
而不是这个:
im_pil = Image.fromarray(obj=array2d.reshape(int(math.sqrt(size)), int(math.sqrt(size))), mode='RGB')
试试这个:
arr3d = arr.reshape(2,3,2)
Image.fromarray(arr3d,'RGB').show()