我有一个文本文件,其中包含十六进制格式的图像数据(1张图片)。
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位灰度RAW图像。我想将数据转换为图像。任何想法如何在Python中做到这一点?
答案 0 :(得分: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')
您必须在屏幕上调整图像大小才能看到一些(灰色)颜色
答案 1 :(得分: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)