【问题标题】:From Raw binary image data to PNG in Python从原始二进制图像数据到 Python 中的 PNG
【发布时间】:2016-09-25 21:17:38
【问题描述】:

搜索了几个小时后,我最终找到了this 链接。下面是一些背景信息。

我正在通过硬件调试器捕获正在运行的嵌入式设备的实时帧。捕获的帧存储为raw binary files,没有标题或格式。在查看了上面的链接并理解了 NumPY 和 Matplotlib 之后,我能够成功地将原始二进制数据转换为图像。这很重要,因为我不确定原始二进制文件的链接是否对任何人有帮助。

我使用这个代码:

import matplotlib.pyplot as plt # study documentation
import numpy as np              #   "       " 

iFile = "FramebufferL0_0.bin" # Layer-A
shape = (430, 430) # length and width of the image
dtype = np.dtype('<u2') # unsigned 16 bit little-endian.
oFile = "FramebufferL0_0.png"

fid = open(iFile, 'rb')
data = np.fromfile(fid, dtype)
image = data.reshape(shape)

plt.imshow(image, cmap = "gray")
plt.savefig(oFile)
plt.show()

现在,我显示的图像是黑白的,因为彩色图是灰度图(对吗?)。实际捕获的帧不是黑白的。也就是说,我在嵌入式设备上看到的图像是“彩色的”。

我的问题是,如何从原始二进制文件中计算每个像素的实际颜色?有没有办法从原始二进制文件中获取图像的实际颜色图?我查看了this 示例,我确信,如果我能够计算 R、G 和 B 通道(以及 Alpha),我将能够重新创建准确的图像。一个示例代码会很有帮助。

【问题讨论】:

    标签: python numpy matplotlib


    【解决方案1】:

    RGBA 图像有 4 个通道,一个用于每种颜色,一个用于 Alpha 值。二进制文件似乎只有一个通道,因为执行data.reshape(shape) 操作时不会报告错误(相应RGBA 图像的形状为(430、430、4))。 我看到两个潜在的原因:

    1. 实际图像确实有颜色信息,但是当您抓取数据时,您只抓取了四个通道之一。

    2. 图像实际上是灰度图像,但嵌入式设备显示的是伪彩色图像,造成颜色信息的错觉。在不知道正在使用什么颜色图的情况下,除了将您指向matplotlib.pyplot.colormaps() 之外很难为您提供帮助,它列出了 matplotlib 中所有已经可用的颜色图。

    可以吗

    a) 解释成像模式的确切来源/类型,以及

    b) 显示嵌入式设备输出的照片?

    PS:另外,至少在我手中,粘贴的二进制文件的大小似乎为 122629,与 (430,430) 的图像形状不一致。

    【讨论】:

    • “实际的图像确实有颜色信息,但是当你抓取数据时,你只抓取了四个通道之一。”。是的,我猜这似乎是问题所在。如何分别抓取每个频道?我粘贴了错误的二进制文件,正确的是:pastebin.com/FGEDRbjC this is congruent with an image shape of 430*430 (size == 184990)
    猜你喜欢
    • 2012-11-30
    • 2020-08-12
    • 2012-10-06
    • 2018-02-18
    • 2013-07-02
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    相关资源
    最近更新 更多