如何从Python中的一系列位绘制图像?

数据挖掘 机器学习 Python 图像分类 可视化
2022-03-14 11:24:59

我得到了一些手写字母的 0 和 1 数据集(下面是一个图像的系列),我想在 python 中可视化它们。如何做到这一点?

'000000000000001010000000000000000000000000000111110000000000000000000000000001111000000000000000000000000000111100000000000000000000000000001111000000000000000000000000000111110000000000000000000000000011111100000000000000000000000000111111100000000000000000000000001111111000000000000000000000000011111110000000000000000000000000111111110000000000000000000000011111111100000000000000000000000111111111100000000000000000000001111111111000000000000000000000011111111110000000000000000000001111111111110000000000000000000011111111111100000000000000000000111111011111100000000000000000001111100111110000000000000000000111111000111110000000000000000001111100001111110000000000000000011111000001111100000000000000001111110000011111100000000000000011111000000111111100000000000000111110000000111111000000000000011111100000001111110000000000000111110000000001111110000000000001111100000000011111100000000000111111000000000011111100000000001111110000000000111111110000000011111100000001111111111111100000111111111111111111111111111100011111111111111111111111111111000111111111111111111111111111100001111111111111110000011111100000011111100000000000000111111000000111110000000000000001111110000011111100000000000000001111110000111110000000000000000011111100001111100000000000000000011111000111111000000000000000000111110001111110000000000000000001111110011111100000000000000000011111100111110000000000000000000011111001111100000000000000000000111110011111000000000000000000001111101111110000000000000000000011111111111100000000000000000000011111111110000000000000000000000111111111100000000000000000000001111111110000000000000000000000001110'

我需要一个字节一个字节地获取像素值吗?

1个回答

您至少可以使用以下两个选项:

  • PIL 库:

    from PIL import Image
    
    img = Image.new('1', (width, height)) #width and height of the original image
    data=[int(x) for x in x]  #x being your array
    img.putdata(data)
    img.save('my_handwritten_number.png')
    img.show()
    

您可以在此处查看整个过程的示例,从读取手写图像文件到将其转换为数组并再次将其显示为图像:

在此处输入图像描述

import numpy as np 

np_img=np_img.reshape(28900, )

width = np.sqrt(len(np_img))

from PIL import Image

img = Image.new('1', (int(width), int(width)))
data=[int(np_img) for np_img in np_img]
img.putdata(data)
img.save('my_hand_written_digit.png')
img.show()

结果得到这个重建的数字:

在此处输入图像描述

尽管如此,我看到你的数组是一个一维数组,其平方根不是整数,所以它似乎不是来自正方形图像;您需要能够将其转换为矩阵(通过 Image.new 方法)。如果我用你的数组来做,这就是我得到的:

在此处输入图像描述

  • 另一个选择是使用 Keras:

    import tensorflow.keras as keras 
    
    keras.preprocessing.image.array_to_img(np_img.reshape(170, 170, 1), 
    data_format=None, scale=True, dtype=None)
    

在此处输入图像描述