【Python 打开Raw data】


前言

Raw data 是图像传感器输出的原始图像数据。随着图像传感器性能的发展,Raw data包含8/10/12/14/16/20/24 bit。
但不同于JPEG、BMP 等标准图像格式,缺乏一个标准、广泛的软件,打开Raw data 。本文借助NumPy打开Raw data。


一、NumPy

NumPy(Numerical Python)是Python的一种开源的数值计算扩展。可用来存储和处理大型矩阵,支持大量的维度数组与矩阵运算,对数组运算提供大量的数学函数库 。

二、使用步骤

1.引入库

代码如下:

import numpy as np
from PIL import Image as im

2.读入Raw data

分析Raw data,Max 、Min value ,确定正确的Bit-wide 和Data-format。
以12-bit raw 为例,通常存储为16-bit,用8-bit显示,需要进行数据转换。
可能存在以下存储格式:

543210XX_DCBA9876 (Little-Endian)
DCBA9876_543210XX (Big-Endian)
XXDCBA98_76543210

代码如下:

file_path='raw12.raw'
 def RAW12(file_path):
    print('Load raw12')
    # Image information: Data format, rows, columns, channels
    imgsize=(1286,1920)

    # Use numpy's fromfile to read the raw file and specify the data format
    img=np.fromfile(file_path, dtype='uint16')
    print('image shape:',np.shape(img))
    # Use the array's reshaping function in numpy to rearrange the read data.
    reshapeRawData = np.reshape(img,imgsize)
    print('\tmax value:',reshapeRawData.max())
    print('\tmin value:',reshapeRawData.min())

    for i in range(reshapeRawData.shape[0]):
        for j in range(reshapeRawData.shape[1]):
        # Convert the data to 8-bit
            val = np.round(reshapeRawData[i][j] >> 8)          
            if val >= 255:
                reshapeRawData[i][j] = 255
            elif val <= 0:
                reshapeRawData[i][j] = 0
            else:
                reshapeRawData[i][j] = val
    print('Conversion')
    print('\tmax value:',reshapeRawData.max())
    print('\tmin value:',reshapeRawData.min())
    
    reshapeRawData=reshapeRawData.astype(np.uint8)
    img = im.fromarray(reshapeRawData)

    img.show()
    print('Done!')

RAW12(file_path)

3.显示Raw data

左侧是显示12-bit Raw data;
右侧是Raw data插值后,仅用作对比展示。

在这里插入图片描述


总结

本文简单介绍NumPy的使用。NumPy提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,能够便捷高效地处理大量数据,广泛应用在数据分析、深度学习、图像处理、机器视觉、量化金融等领域。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值