python代码middlebury数据格式.ppm.pgm.pfm批量转换.png

#转换pfm到png格式
# -*- coding:utf8 -*-
import re
import numpy as np
import os
import cv2

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


def convert_pfm_to_png(pfm_dir, output_dir):
    # 检查输出目录是否存在,如果不存在则创建
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

        # 遍历PFM文件目录
    for file_name in os.listdir(pfm_dir):
        if file_name.endswith('.pfm'):
            pfm_path = os.path.join(pfm_dir, file_name)
            image_data = read_pfm(pfm_path)

            # 构建输出文件名和路径
            output_file_name = os.path.splitext(file_name)[0] + '.png'
            output_path = os.path.join(output_dir, output_file_name)

            # 将numpy数组转换为OpenCV图像并保存
            # 注意:image_data需要是符合OpenCV格式的图像数据(通常是uint8类型)
            # 如果不是,则需要进行转换
            cv2.imwrite(output_path, image_data)
            print(f'Converted {pfm_path} to {output_path}')

        # 设置PFM文件目录和输出目录


pfm_directory = r'input your path'
output_directory = r'output png path'

# 调用函数进行转换
convert_pfm_to_png(pfm_directory, output_directory)

转换ppm和pgm

from PIL import Image
import os
import glob


# 定义转换函数
def convert_images(input_dir, output_dir, input_ext, output_ext):
    # 检查输出目录是否存在,如果不存在则创建
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    # 获取input_dir目录下所有指定格式的文件
    files = glob.glob(os.path.join(input_dir, '*.%s' % input_ext))

    # 遍历文件列表,逐个转换
    for file_path in files:
        # 读取图像
        img = Image.open(file_path)

        # 构建输出文件名
        output_file_name = os.path.splitext(os.path.basename(file_path))[0] + '.' + output_ext
        output_file_path = os.path.join(output_dir, output_file_name)

        # 转换并保存图像
        img.convert('RGB').save(output_file_path, format=output_ext, quality=90)

        print(f'Converted {file_path} to {output_file_path}')


# 设置输入输出目录和文件格式
input_directory = r'D:/input'  # 替换为你的输入目录路径
output_directory = r'D:/output'  # 替换为你的输出目录路径
# input_formats = ('ppm',  'pgm')  # 需要转换的文件格式
input_formats = ('pgm') #设置需要转换的格式
output_format = 'png'  # 输出文件格式


# 调用转换函数
convert_images(input_directory, output_directory, input_formats, output_format)

参考:Python读取PFM格式的图像_python 读取pfm文件-CSDN博客

以及kimi chat

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值