我正在尝试使用PIL中的Image.fromarray()函数生成PNG,但没有获得预期的图像。
arr=np.random.randint(0,256,5*5)
arr.resize((5,5))
print arr
给出
[[255 217 249 221 88]
[ 28 207 85 219 85]
[ 90 145 155 152 98]
[196 121 228 101 92]
[ 50 159 66 130 8]]
然后
img=Image.fromarray(arr,'L')
new_arr=np.array(img)
我希望new_arr与arr相同但是
print new_arr
[[122 0 0 0 0]
[ 0 0 0 61 0]
[ 0 0 0 0 0]
[ 0 168 0 0 0]
[ 0 0 0 0 221]]
答案 0 :(得分:1)
问题是np.random.randint()
返回signed int,而'L'
的{{1}}选项告诉它将数组解释为8位 unsigned int( PIL modes)。如果您明确地将其强制转换为Image.fromarray()
,则可以:
uint8
输出:
arr=np.random.randint(0,256,5*5)
arr.resize((5,5))
print arr
然后
[[255 217 249 221 88]
[ 28 207 85 219 85]
[ 90 145 155 152 98]
[196 121 228 101 92]
[ 50 159 66 130 8]]
输出:
img=Image.fromarray(arr.astype('uint8'),'L') # cast to uint8
new_arr=np.array(img)
print new_arr