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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM