如何在Python中将csv文件(16位(高)颜色)转换为图像?

时间:2018-08-26 14:48:56

标签: python image csv python-imaging-library

上下文: 我建立了一个小型热像仪,可以将70x70像素保存到SD卡中。 这些像素的颜色值范围是0到2 ^ 16。 (实际上,从不显示某些颜色,例如黑色(值0))。 这种颜色的确定方法如下:c++ defined 16bit (high) color

我想使用Python在计算机上将此数据转换为图像。

不幸的是,从另一个问题中收集到的一个示例并没有取得令人满意的结果: bad image

如您所见,图像看起来不是很好。 我的屏幕显示如下内容(请注意,这两个示例不是同时捕获的): photo

白框不是csv文件的一部分。

这是我用来生成图像的代码: 我已经尝试过color_max的值,但是没有得到很好的结果。

#Python CSV to Image converter
#pip2 install cImage
#pip2 install numpy

from PIL import Image, ImageDraw
from numpy import genfromtxt

color_max = 256
#original 256

g = open('IMAGE_25.TXT','r')
temp = genfromtxt(g, delimiter = ',')
im = Image.fromarray(temp).convert('RGB')
pix = im.load()
rows, cols = im.size
for x in range(cols):
    for y in range(rows):
        #print str(x) + " " + str(y)
        pix[x,y] = (int(temp[y,x] // color_max // color_max % color_max),int(temp[y,x] // color_max  % color_max),int(temp[y,x] % color_max))
im.save(g.name[0:-4] + '.jpeg')

这是csv文件:Image Data

31在这种情况下表示蓝色,高值表示红色。

感谢您的帮助!


以下是有关我的项目的其他信息:

使用Panasonic制造的AMG8833热成像传感器,具有SD卡支持和图像保存功能的Arduino热像仪:Datasheet

GitHub (Arduino and Python Code)

3D-printable case used by me and original Arduino code

Schematic with SD card added

1 个答案:

答案 0 :(得分:2)

我认为它应该像这样:

#!/usr/local/bin/python3
import numpy as np
from PIL import Image

# Read 16-bit RGB565 image into array of uint16
with open('IMAGE_25.TXT','r') as f:
    rgb565array = np.genfromtxt(f, delimiter = ',').astype(np.uint16)

# Pick up image dimensions
h, w = rgb565array.shape

# Make a numpy array of matching shape, but allowing for 8-bit/channel for R, G and B
rgb888array = np.zeros([h,w,3], dtype=np.uint8)

for row in range(h):
    for col in range(w):
        # Pick up rgb565 value and split into rgb888
        rgb565 = rgb565array[row,col]
        r = ((rgb565 >> 11 ) & 0x1f ) << 3
        g = ((rgb565 >> 5  ) & 0x3f ) << 2
        b = ((rgb565       ) & 0x1f ) << 3
        # Populate result array
        rgb888array[row,col]=r,g,b

# Save result as PNG
Image.fromarray(rgb888array).save('result.png')

enter image description here

关键字:Python,numpy,图像,图像处理,热像仪,松下,AMG8833,RGB565,解压,打包,Arduino。