关于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)

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页