如何将包含图像数据的文本文件转换为图像?
我有一个文本文件,里面存储了一张图片的数据,这些数据是用十六进制的格式表示的。
12:0a:11:0b:08:18:0d:0e
0e:0c:14:12:0a:0d:10:0e
0f:12:0b:0e:0c:0e:0a:14
11:13:0c:0e:13:0e:0a:10
0e:0c:11:08:0c:0e:0f:0e
0c:0c:0b:12:06:10:0e:0e........and so on
这些数据是通过一个集成的串行摄像头(ucam)获取的。这张图片的尺寸是80x60,属于8位灰度的原始图像。我想把这些数据转换成一张图片。有没有什么好的方法可以用Python来实现这个?
2 个回答
0
如果你把文本形式的数据转换成原始的字节数据,就可以使用PIL库里的Image.fromstring
这个方法把它变成一张图片。
from PIL import Image
values = [v for line in data.split() for v in line.split(':')]
bstr = ''.join(chr(int(v, 16)) for v in values)
im = Image.fromstring('L', (80, 60), bstr)
0
也许还有更好的解决办法,但我觉得可以用 PyGame
来实现。
因为只有部分数据,所以我重复使用这些数据来得到完整的 80x60 的图像。
如果有完整的数据,就需要进行一些更改。
data ='''12:0a:11:0b:08:18:0d:0e
0e:0c:14:12:0a:0d:10:0e
0f:12:0b:0e:0c:0e:0a:14
11:13:0c:0e:13:0e:0a:10
0e:0c:11:08:0c:0e:0f:0e'''
sf = pygame.Surface((80,60), depth=24)
x = 0
y = 0
for __ in range(120): # repeat the same data
for row in data.splitlines():
for pixel in row.split(':'):
c = int(pixel,16)
sf.set_at((x,y), pygame.Color(c,c,c))
x += 1
if x == 80:
x = 0
y += 1
pygame.image.save(sf, 'new.png')
你需要在屏幕上调整图像的大小,才能看到一些(灰色的)颜色。