Python利用PIL将数值矩阵转化为图像

要求:输入一个n*n的矩阵,矩阵包括从-1到1的浮点数,将其转化为可视化图像

调库

from PIL import Image
import numpy as np
import math

载入图像,并使用np.array()转化为矩阵

Image.new()第一个参数是模式,第二个是尺寸,第三个参数如果不填默认是黑色,填3个255就是白色.

img = Image.new('RGB', (256, 256), (255, 255, 255))
matrix=np.array(img)
matrix

输出

array([[[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       ...,

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]]], dtype=uint8)

可以利用如下方法修改matrix的值

matrix[0][0]=[0,0,0]
matrix
array([[[  0,   0,   0],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       ...,

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]],

       [[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
        ...,
        [255, 255, 255],
        [255, 255, 255],
        [255, 255, 255]]], dtype=uint8)

制造数据,100*100的矩阵,包含-1到1的浮点数

lis=[[]for i in range(100)]
for i in range(100):
    for j in range(100):
        lis[i].append(float(math.sin(i+j)))
lis[1][1]
0.9092974268256817

将[-1,1]映射到[0,255],负数为绿色系,正数为紫色系.

for i in range(100):
    for j in range(100):
        degree=lis[i][j]
        rgb=int(abs(degree)*255)
        #print(rgb)
        if(degree>=0):
            matrix[i][j]=[rgb,0,rgb]
        else:
            matrix[i][j]=[0,rgb,0]
img=Image.fromarray(matrix)
img

_VMPM_GLP72Y__JNMW_91_I.png

原文地址:https://www.cnblogs.com/Tony100K/p/11643730.html