使用python打开.raw图像数据

时间:2015-09-07 13:24:36

标签: numpy python-imaging-library

我一直在谷歌搜索使用python库显示原始图像数据但无法找到任何正确解决方案的方法。数据来自相机模块,并具有'.raw'扩展名。此外,当我尝试通过'more filename.raw'在终端中打开它时,控制台说这是一个二进制文件。供应商告诉我相机输出16位原始灰度数据。

但我想知道如何通过PIL,Pillow或Numpy显示这些数据。我测试了PIL的Image模块。但是,它无法识别图像数据文件。似乎PIL不将.raw文件视为图像数据格式。可以显示BMP文件,但是'.raw'不能显示。

当我尝试使用read函数和matplotlib时,如下所示

from matplotlib import pyplot as plt
f = open("filename.raw", "rb").read() 
plt.imshow(f) 
plt.show()

然后

发生错误
  

错误:图像数据无法转换为浮动

任何想法都将受到赞赏。

链接: camera module

我使用以下代码进行了一些改进。但现在问题是这段代码只显示整个图像的某些部分。

from matplotlib import pyplot as plt
import numpy as np
from StringIO import StringIO
from PIL import *
scene_infile = open('G0_E3.raw','rb')
scene_image_array = np.fromfile(scene_infile,dtype=np.uint8,count=1280*720)
scene_image = Image.frombuffer("I",[1280,720],
                                 scene_image_array.astype('I'),
                                 'raw','I',0,1)
plt.imshow(scene_image)
plt.show()

2 个答案:

答案 0 :(得分:7)

查看rawpy

import rawpy
import imageio

path = 'image.raw'
raw = rawpy.imread(path)
rgb = raw.postprocess()
imageio.imsave('default.tiff', rgb)

rgb只是一个RGB numpy数组,因此您可以使用任何库(而不仅仅是imageio)将其保存到磁盘。

如果您想访问未经处理的拜耳数据,请执行以下操作:

bayer = raw.raw_image

另请参阅API docs

答案 1 :(得分:0)

nil