我一直在google搜索使用python库显示原始图像数据的方法,但找不到任何合适的解决方案。数据来自相机模块,并具有'.raw'扩展名。当我试图通过'more filename.raw'在终端打开它时,控制台说这是一个二进制文件。厂商告诉我,相机输出16位原始灰度数据。使用python打开.raw图像数据
但我想知道如何通过PIL,Pillow或Numpy显示这些数据。我测试了PIL的Image模块。但是,它无法识别图像数据文件。看来PIL不会将.raw文件视为图像数据格式。可以显示BMP文件,但是'.raw'不能。
此外,当我试图与刚才读功能和matplotlib,如以下
from matplotlib import pyplot as plt
f = open("filename.raw", "rb").read()
plt.imshow(f)
plt.show()
然后用
ERROR: Image data can not convert to float
任何想法可以理解发生了错误。
链接: 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()
RAW在位图或jpeg的意义上不是图像格式。这些图像包含每个像素的颜色,例如rgb值。 RAW基本上包含了照片船的原始数据,尚未转换为颜色值(因此是16位灰度)。这就是为什么它经常被(半)专业摄影师用来改变颜色在后期处理中的显示方式。由于将数据转换为每个像素的颜色的步骤尚未完成,因此所有标准图片库很可能无法读取RAW数据格式。 – Dux
你是否搜索过numpy和RAW?我记得一些关于RAW的具有品牌特定标题块的内容。 – hpaulj
你可能想看看[rawkit](https://github.com/photoshell/rawkit)。我从来没有使用它,所以不能评论它对你的用处,但它看起来可能有帮助 – tom