Python读取PFM格式的图像

发布时间:2023年12月29日

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)
文章来源:https://blog.csdn.net/qq_43811536/article/details/135290663
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。