![如何打开带有奇怪自定义标头的 .RAW 文件](https://linux22.com/image/1400641/%E5%A6%82%E4%BD%95%E6%89%93%E5%BC%80%E5%B8%A6%E6%9C%89%E5%A5%87%E6%80%AA%E8%87%AA%E5%AE%9A%E4%B9%89%E6%A0%87%E5%A4%B4%E7%9A%84%20.RAW%20%E6%96%87%E4%BB%B6.png)
我有一个奇怪的 .raw 文件,格式如下,我需要打开它来完成课堂项目。它的结构如下,以 487x414 照片为例:
- 行数为两个无符号字节(01E7)
- 列数为两个无符号字节(019E)
- 代表每个像素的位数(始终为 8)
- 实际图像数据
该项目是在 .raw 文件上运行边缘检测,但教授说我应该能够使用任何旧的图像编辑软件打开它(显然,他希望我得到一个窗口提示,让我设置标题中的字节数),所以我尝试了以下方法但无济于事:
- Paint.net
- Photoshop Elements
- Adobe Lightroom
- 图像魔术师
- 瘸子
- 直流电阻
我正在双启动 Ubuntu 和 Windows,所以如果有人对如何显示此文件有任何想法,(我目前正尝试将其作为直方图加载到 OpenCV 中,但我希望有一些东西可以检查我的结果),我将不胜感激。
答案1
我最终不得不编写一个自定义 Python 脚本,你可以找到这里。这是重点部分。
#Load the raw file
f = open(filename,'rb') # switch to command line args later
#Because the byte order is weird
a = f.read(1)
b = f.read(1)
#First line is rows
rows = int((b+a).encode('hex'), 16)
a = f.read(1)
b = f.read(1)
#Second line is columns
cols = int((b+a).encode('hex'), 16)
#Last byte is encoding, but we're just going to ignore it
f.read(1)
#And everything else is 8 bit encoded, so let's load it into numpy and display it with matplotlib
bin_image = np.fromstring(f.read(), dtype=np.uint8)
#Change the shape of the array to the actual shape of the picture
bin_image.shape = (cols, rows)
fig = pylab.figure()
#Display the original image
fig.add_subplot(1,4,1)
pylab.imshow(bin_image, cmap=cm.gray)