Python 打开Raw data

前言一、NumPy二、使用步骤1.引入库2.读入Raw data3.显示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提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,能够便捷高效地处理大量数据,广泛应用在数据分析、深度学习、图像处理、机器视觉、量化金融等领域。

参考文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。