PFM(Portable FloatMap)是一种用于存储浮点数灰度图像的文件格式。下面是使用Python读取PFM格式图像的一种方法read_pfm()
,该函数首先读取文件的头部信息,包括文件格式、图像尺寸和缩放因子。然后,它读取文件中的像素数据,并根据需要进行重构和缩放。最后,函数返回一个包含图像数据的NumPy数组。只需将代码中的image.pfm
替换为你要读取的PFM图像的文件路径即可。
def read_pfm(file):
"""
读取PFM格式的图像
"""
with open(file, "rb") as f:
# 读取头部信息
header = f.readline().rstrip()
color = True if header == b'PF' else False
# 读取尺寸信息
dim_match = re.match(r'^(\d+)\s(\d+)\s$', f.readline().decode('ascii'))
if dim_match:
width, height = map(int, dim_match.groups())
else:
raise Exception("Malformed PFM header.")
# 读取比例因子
scale = float(f.readline().rstrip())
if scale < 0: # 如果比例因子为负,则数据为小端字节序
endian = '<'
scale = -scale
else:
endian = '>' # 大端字节序
# 读取图像数据
data = np.fromfile(f, endian + 'f') # 根据头部信息读取浮点数
shape = (height, width, 3) if color else (height, width)
data = np.reshape(data, shape)
data = np.flipud(data) # PFM格式存储的图像通常是上下颠倒的
return data
# 读取PFM图像
image_data = read_pfm('image.pfm')
# 打印图像形状和数据类型
print('Image Shape:', image_data.shape)
print('Data Type:', image_data.dtype)