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提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,能够便捷高效地处理大量数据,广泛应用在数据分析、深度学习、图像处理、机器视觉、量化金融等领域。
参考文章
发表评论