• 【python】python+numpy模块读、写raw图并使用opencv显示图片


    参考链接:

    1. 使用Python读取raw格式图像并显示
    2. NumPy 数据类型

    python对raw图的操作,读取raw图、保存raw图,raw10转raw8操作。

    大概用到以下函数:

    1. astype()-进行数值类型转换
    2. numpy.reshape()-将数组重新排列
    3. numpy.fromfile()-读取文件,将文件中的数据以numpy.ndarray类型保存
    4. numpy.ndarray.tofile()numpy.ndarray数据保存到文件中;

    numpy中的常用数据类型:

    名称说明
    bool_布尔型数据,True或False
    int_默认的整型数据,类似C中的long,int32或int64
    intc与C中的int类型一样,一般是int32或int64
    intp用于索引的整数类型,类似C中的ssize_t,一般仍然是int32或int64
    int8、int16、int32、int64字节、整数、整数、整数,范围分为是
    -128127、-3276832767、
    -2147483648~2147483647
    -9223372036854775808 to 9223372036854775807
    uint8、uint16、uint32、uint64无符号整数,取值范围分别为:
    0~255、
    0~65535、
    0~4294967295
    0~18446744073709551615
    float16半精度浮点数,包括:1个符号位,5个指数位,10个尾数位
    float32单精度浮点数,包括:1个符号位,8个指数位,23个尾数位
    float64、float_双精度浮点数,包括:1个符号位,11个指数位,52个尾数位

    参考代码:

    import numpy as np
    
    def read_raw(file:str,shape:tuple,dtype):
        '''
        读取raw图
        :param file: 文件名
        :param shape: 读取的数据排列,(row,col,channel)
        :param dtype: raw文件类型
        :return: 读取的数据
        '''
        # 从raw文件中读取数据
        data = np.fromfile(file,dtype=dtype)
        # 将读取到的数据重新排列
        data = np.reshape(data,newshape=shape)
        # 返回数据
        return data
    
    
    def write_raw(file:str,data:np.ndarray):
        '''
        保存raw图
        :param file: 文件名
        :param data: 保存的数据
        :return: 无返回值
        '''
        data.tofile(file)  # 保存数据data到文件file中
    
    
    def raw_to_raw8(data:np.ndarray,divide:int):
        '''
        raw10、raw12、raw16数据转raw8数据
        :param data: 原始raw数据,pixel raw格式
        :param divide: 转换系数,raw10是4,raw12是power(2,4),raw16是power(2,8)
        :return: 返回raw8数据
        '''
        new_data = data/divide
        return new_data.astype(np.uint8)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    实际测试:

    if __name__ == "__main__":
        img = read_raw(str("crop"+"."+"raw"),(400,534,1),dtype=np.uint16)
        print(type(img))
        print(np.shape(img))
    
        write_raw("4.raw",img)
        new_data = raw_to_raw8(img,4)
        write_raw("5.raw",new_data)
    
        cv2.imshow("raw",new_data)
        dst = cv2.cvtColor(new_data,cv2.COLOR_BayerGR2BGR)
        print(np.shape(dst))
        cv2.imshow("bmp",dst)
        cv2.waitKey(0)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    显示结果,raw是单通道是,所以显示是黑白的,bmp是三通道,显示是彩色的。
    在这里插入图片描述

  • 相关阅读:
    背包问题汇总
    【Proteus仿真】【51单片机】水箱液位监控系统
    基于STM32+射频模块设计的导盲杖
    C#禁用或启用任务管理器
    【计算机组成原理】第三章 存储系统
    jvm实践
    教学资源共享平台的设计
    【算法】分治 - 归并排序
    多肽介导PEG磷脂——磷脂-聚乙二醇-靶向肽SP94,DSPE-PEG-SP94
    python货币转换
  • 原文地址:https://blog.csdn.net/sinat_41752325/article/details/127593260