我正在尝试读取* .his格式的图像文件。老实说,我不太了解这种格式,花了一些时间在谷歌上我发现它是一种二进制格式,它可以在ImageJ软件中作为原始格式导入读取。在进一步调查中,我找到了* .his文件的以下详细信息:
掌握了这些信息后,我开始......
只想逐个打印值,只是为了查看输出:
f = open("file.his", 'rb')
f.seek(100)
try:
byte = f.read(2)
while byte != "":
byte = f.read(2)
print unpack('<H', byte)
finally:
f.close()
打印出一些数字,然后输出错误信息: ..... (64846) (64846) (64830)
追踪(最近一次通话): 打印解压缩('
Plz可以有人建议我如何阅读这种文件。我仍然认为'解包'是正确的功能,但如果有人有相似的经验,任何回复都会非常感激。
RKY。
答案 0 :(得分:0)
我用* .inr图像文件完成了一个非常类似的任务,也许逻辑可以帮助你,这里你可以申请:
1 - 阅读文件
首先,您需要阅读该文件。
file = open(hisfile, 'r')
inp = file.readlines()
2-Get header
在我的情况下,我做了一个for循环,直到字符数为256,在你的情况下,你需要计算位数,这样你可以逐行“打印”,以找出你需要停止或尝试使用这个计算位数:
import sys
sys.getsizeof(line) #returns the size of the object
第3-数据强>
当您已经知道以下行是原始数据时,您需要将它们放在带有for循环的一个变量中:
for line in inp:
raw_data += line
4 - 转换数据
要将字符串转换为numpy数组,您可以执行以下操作:
data = fromstring(raw_data, dtype='uint16')
然后应用形状数据:
data = data.reshape((1024,1024)).transpose() #You need to see if the transpose part its relevant,because in my case was fundamental.
也许如果你有一个文件的例子我可以尝试阅读它并帮助你更多。当然,你可以使用if来完成1 for for循环中的所有过程。