在您的评论中您指定red_arr
等是范围为 -4000 到 4000 的数组。
但如果我们看一下它的规格Image.from_array modes http://pillow.readthedocs.io/en/3.1.x/handbook/concepts.html#concept-modes,然后我们看到它需要一个由三个组成的矩阵bytes(值从 0 到 255)。
然而,这本身并不是问题:我们可以执行:
def rescale(arr):
arr_min = arr.min()
arr_max = arr.max()
return (arr - arr_min) / (arr_max - arr_min)
red_arr_b = 255.0 * rescale(red_arr)
green_arr_b = 255.0 * rescale(green_arr)
blue_arr_b = 255.0 * rescale(blue_arr)
arr[:,:,0] = red_arr_b
arr[:,:,1] = green_arr_b
arr[:,:,2] = blue_arr_b
img = Image.fromarray(arr.astype(int), 'RGB')
因此,首先我们将范围重新调整为 0 到 255,然后将该数组提供给 PIL。
我们也可能希望以同样的方式缩放红色、绿色和蓝色。在这种情况下我们可以使用:
def rescale(arr):
arr_min = arr.min()
arr_max = arr.max()
return (arr - arr_min) / (arr_max - arr_min)
arr[:,:,0] = red_arr
arr[:,:,1] = green_arr
arr[:,:,2] = blue_arr
arr = 255.0 * rescale(arr)
img = Image.fromarray(arr.astype(int), 'RGB')