我正在使用Fortran中的旧有限元代码。这是一所大学的研究项目。
我有一个文件 .raw ,用于表示3D图像。
.raw 文件中的数据存储在 uint16 或 uint8 中,并且知道整数总数。
如何在Fortran程序中将此图像读取为整数数组?
类似的东西
allocate(imgarray(total_int))
call raw2array(filename,imgarray)
我目前正在使用python来读取图像,并将其转换为整数向量。使用文本文件在Fortran中读取此向量。
在python中
imgarray = np.fromfile(fid, dtype=np.uint16,count=total_int,sep='')
但是当读取超过 1000x1000x1000 整数的文件时,过程变得非常慢。
该项目要求在Fortran中的程序中以二进制形式读取图像 .raw ,作为完成向量的子例程。
如何使用Fortran中的子程序读取此图像(二进制)并将其转换为整数向量?
答案 0 :(得分:1)
if your compiler supports 16 bit integers and stream access it is as simple as this
use iso_fortran_env
implicit none
integer(kind=INT16), allocatable::m(:,:,:)
allocate(m(1000,1000,1000))
open(100,file='test.raw',access='stream')
read(100)m
end
答案 1 :(得分:0)
从@agentp给出的解决方案中, .raw 文件在数组中读取:
use iso_fortran_env
implicit none
integer(kind=INT16), allocatable::m(:)
integer total_int
total_int = 1000*1000*1000
allocate(m(total_int))
open(100,file='test.raw',access='stream')
read(100)m