我有一个包含240x320图像的文件,但是它的字节格式我在十六进制编辑器中打开,得到了一个类似数组16列4800的原始数据。在
我对这一点完全陌生,这就是为什么我尝试使用python脚本时遇到了麻烦,但是在第17行data=columnvector[0][I]中出现了一个错误:
IndexError: list index out of range.
我尝试过一个java代码,但这也是一个错误,我想尝试一些c代码,但没有一个代码能解释如何将我的文件馈送到代码中。这是python代码
import csv
import sys
import binascii
csv.field_size_limit(500 * 1024 * 1024)
columnvector = []
with open('T1.csv', 'r') as csvfile:
csvreader = csv.reader(csvfile,delimiter=' ', quotechar='|')
for row in csvreader:
columnvector.append(row)
headers =['42','4D','36','84','03','00','00','00','00','00','36','00','00','00','28','00','00','00',
'40','01','00','00','F0','00','00','00','01','00','18','00','00','00','00','00','00','84','03','00','C5','00',
'00','00','C5','00','00','00','00','00','00','00','00','00','00','00']
hexArray=[]
for i in range(0,76800):
data = columnvector[0][i]
hexArray.extend([data,data,data])
with open('T1.txt', 'wb') as f:
f.write(binascii.unhexlify(''.join(headers)))
f.write(binascii.unhexlify(''.join(hexArray)))
我想用任何方法把文件转换成图像,我真的不在乎用什么方法,只要它能完成任务。在
是一个硬编码的值,由于
columnvector[0][i]
没有那么多值,因此得到IndexError: list index out of range.
考虑一下为什么需要将范围设置在0-76800之间,或者该值是否可以从某事物的
len()
中动态获得。在不需要编写任何Python就可以将二进制数据转换成图像,只需在终端中使用ImageMagick。它包含在大多数Linux发行版中,可用于macOS和Windows。在
如果您的图像是320x240,它应该是:
因为你的图像是76800,我假设它们是灰度级的。在
因此,在Terminal中,要将原始数据生成JPEG,请使用:
或者,如果您使用的是ImageMagick的第6版,请使用:
^{pr2}$如果要自动拉伸对比度的PNG,请使用:
不幸的是,你的照片中没有一幅是明智的。以下是T1,例如:
不过,柱状图看起来确实有些合理:
我认为你有一些根本性的错误,所以我会尝试回到第一原则来调试它。我会用手电筒照射,或者将相机对准窗口保存一张名为
bright.dat
的照片,然后用一张黑卡盖住镜头,拍摄另一张名为dark.dat
的图像。然后我会绘制一个数据直方图,看看亮的在最右边,深色的在最左边。做一个这样的柱状图:以及:
从二进制文件生成图像的另一种简单方法是将其转换为NetPBM图像。在
由于您的文件是320x240和8位二进制灰度,所以您只需在其中创建一个包含该信息的头文件并附加二进制文件:
现在您可以使用
feh
、Photoshop、GIMP或许多其他图像查看器打开image.pgm
。在相关问题 更多 >
编程相关推荐