图像处理的嵌入式项目中常常要将图片提前写到板子的SDRAM里面,然后在线调试,如果每次都从摄像头中拍摄图片,是很麻烦也很不稳定的。这就涉及到一个小工具,将各类格式的图片转换为文本,即一连串的0~255之间的整数,然后改写成一个巨大的二维数组,再将这个数组烧写到芯片中去。
如下是使用Python实现的这一功能,选择Python实现有很多好处,首先解释性语言,不需要编译,修改起来方便,同时,各种格式图片都能方便读取,如果使用C语言,避免不了还要用到ImageMagick库。
#!/usr/bin/env python
import Image
def pic2txt(infile,outfile):
ff = open(outfile,'w')
f = Image.open(infile)
width,height = f.size
ff.write('['+str(height)+']['+str(width)+']\n') #将大小写到第一行
s = f.tostring() #将图片内容转换为字条串
I = 0
#get the proper mid pixel value
min_val = ord(min(s))
max_val = ord(max(s))
mid_val = (min_val+max_val)/2
print "min:mid:max = ",min_val,":",mid_val,":",max_val
#jpg maybe RGB or Gray
isGray = 1
if width*height*3 == len(s):
isGray = 3
#start to sample
while I<width*height*isGray:
n = ord(s[I])
if n<mid_val: #以mid_val为阈值
n = 0
else:
n = 255
ff.write(str(n))
ff.write(",")
I = I + isGray
if I%(width*isGray) == 0:
ff.write("\n")
ff.close()
if __name__=="__main__":
infile = 'test.jpg' #要读取的目标图片
outfile = 'result.txt' #要写入的最终文件
pic2txt(infile,outfile)
jpg有可能有RGB三个分量,也可能是灰度图,本身只一个分量,嵌入式中,尤其是基于DSP的图像识别,常常处理的是灰度图。