首页 > 解决方案 > 如何将excel文件中的像素值转换为图像?

问题描述

我有一个 Excel 文件,有 100 行和 100 列。每个元素都是一个像素强度值。如何使用 Python 将其转换为 2D 灰度图像?

标签: pythonexcelimagecsv

解决方案


如果您有 Excel.xlsx文件,则可以使用openpyxl读取值。Pillow库可用于构建和保存图像。

假设每个值是一个 8 位值,可以使用以下方法:

from itertools import chain
from PIL import Image
import openpyxl

wb = openpyxl.load_workbook("image.xlsx")
ws = wb.active
data = list(ws.iter_rows(values_only=True))

rows = len(data)
cols = max(len(row) for row in data)

img = Image.new('L', (cols, rows), color='black')
img.putdata(list(chain.from_iterable(data)))
img.save('output.png')

因此,对于包含这些值的 Excel 文件:

Excel 截图

你会得到一个看起来像(放大)的PNG图像:

png图片


如果您的文件实际上是 CSV 格式:

from itertools import chain
from PIL import Image
import csv

data = []

with open('image.csv', newline='') as f_input:
    for row in csv.reader(f_input):
        data.append(list(map(int, row)))
        
rows = len(data)
cols = max(len(row) for row in data)

img = Image.new('L', (cols, rows), color='black')
img.putdata(list(chain.from_iterable(data)))
img.save('output.png')

例如image.csv包含:

24,1,4,255,43,2
2,4,6,0,3,2
1,1,255,3,32,5

推荐阅读