关于pgm类型医学图像的学习

  1. 原数据(可能是)十六进制,每个十六进制数代表一个字节(八位二进制数,取值范围0-255);
  2. pgm文件是b’xxx’后的二进制文件(打开后乱码);
  3. 以ord(yyy)读取每一个字节。

数据集:DDSM

pgm转png代码:

def convert_pgm_P5(in_path, out_path):
	"""
    将pgm文件转换成其它图像格式
    读取二进制文件,先读取幻数,再读取宽和高,以及最大值
    :param in_path: 输入pgm文件路径
    :param out_path: 输出文件路径
    """
    if not is_pgm_file(in_path):
        raise Exception("%s 不是一个PGM文件" % in_path)
    with open(in_path, 'rb') as f:
        # 读取两个字节 - 幻数,并解码成字符串
        magic_number = f.readline().strip().decode('utf-8')
        if not operator.eq(magic_number, "P5"):
            raise Exception("该图像有误")
        # 读取高和宽
        width, height = f.readline().strip().decode('utf-8').split(' ')
        width = int(width)
        height = int(height)
        print('height, width---', height, width)
        # 读取最大值
        maxval = f.readline().strip()
        # 每次读取灰度值的字节数
        if int(maxval) < 256:
            one_reading = 1
        else:
            one_reading = 2
        # 创建空白图像,大小为(行,列)=(height, width)
        img = np.zeros((height, width))
        img[:, :] = [[ord(f.read(one_reading)) for j in range(width)] for i in range(height)]
        print('type(f.read(one_reading))---', type(f.read(one_reading)))
        cv2.imwrite(out_path, img)
        print('%s save ok' % out_path)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值