首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python读取*.his (图像)文件

用Python读取*.his (图像)文件
EN

Stack Overflow用户
提问于 2014-02-22 04:33:05
回答 1查看 1.6K关注 0票数 0

我正在尝试读取一个图像文件,它是*.his格式。老实说,我对这种格式不太了解,花一些时间在谷歌上,我发现它是二进制格式,可以在ImageJ软件中作为原始格式导入。在进一步的查询中,我发现了*.his文件的以下细节:

  • 图像类型=16位无符号
  • 矩阵尺寸(以像素为单位)= w1024 x h1024
  • 跳过头info = 100字节(图像数据第一个字节之前文件中的字节数)。
  • 小端字节命令

有了这些信息,我就开始.

只想一个一个地打印这些值,只为了查看输出:

代码语言:javascript
复制
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,)

回溯(最近一次调用):打印解包(‘

请有人建议我如何阅读这类文件。我仍然认为‘解包’是正确的功能,但如果有人有类似的经验,任何反应都非常感谢。

Rky。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-22 04:56:49

对于*.inr图像文件,我做了一个非常类似的任务--也许逻辑可以帮助您,这里是您可以应用的内容:

1-读取文件

首先,您需要读取文件。

代码语言:javascript
复制
file = open(hisfile, 'r')
inp = file.readlines()

2-Get报头

在我的例子中,我执行了for循环,直到字符数达到256个为止,在您的示例中,您需要计数位,以便逐行“打印”以确定何时需要停止或尝试使用此方法来计数比特:

代码语言:javascript
复制
import sys
sys.getsizeof(line) #returns the size of the object

3-数据

当您已经知道以下行是原始数据时,需要将它们放入一个带有for循环的变量中:

代码语言:javascript
复制
for line in inp:
    raw_data += line

4-转换数据

要将字符串转换为numpy数组,可以这样做:

代码语言:javascript
复制
data = fromstring(raw_data, dtype='uint16')

然后使用形状数据:

代码语言:javascript
复制
data = data.reshape((1024,1024)).transpose() #You need to see if the transpose part its relevant,because in my case was fundamental.

也许,如果你有一个文件的例子,我可以试着读它,并帮助你更多。当然,您可以使用if's在1 for循环中完成所有进程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21949710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档