【问题标题】:Load png image for embedded system为嵌入式系统加载 png 图像
【发布时间】:2017-11-21 10:57:18
【问题描述】:

我正在开发一个使用 tensorRT 的嵌入式深度学习推理 C++ 项目。 对于我的模型,有必要减去平均图像。

我使用的 api 允许我为 rgb 图像定义具有以下数据结构的平均图像:

uint8_t *data[DW_MAX_IMAGE_PLANES];       // raw image data 
size_t pitch;                             // pitch of the image in bytes
uint32_t height;                          // height of the image in px
uint32_t width;                           // image width in px
uint32_t planeCount;                      // plane count of the image

到目前为止,我找到了 lib LodePNG,我认为这对这项任务非常有用。 它只需几行就可以加载 png:

// Load file and decode image.
std::vector<unsigned char> image;
unsigned width, height;
unsigned error = lodepng::decode(image, width, height, filename);

现在的问题是如何将std::vector&lt;unsigned char&gt; 转换为uint8_t *[DW_MAX_IMAGE_PLANES] 并计算pitch 和planeCount 值?

当我使用 rgb 图像时,DW_MAX_IMAGE_PLANES 等于 3。

【问题讨论】:

  • 您的问题的标题似乎有点错误,因为您已经成功加载了 png。
  • 也许std::vector 参考可能有用?有几种方法可以获取指向由向量管理的数据的指针,包括(但不限于)获取指向其第一个元素的指针。
  • 至于其余的,你的库不是为你提供了元数据吗?
  • 使用这里描述的 reinterpret_cast stackoverflow.com/questions/4254615/… 只要确保 unsigned char 和 uint8_t 的大小相同。
  • @MarekVitek 在存在uint8_t 的平台上,它与unsigned char 不同的可能性极小。如果 char 不是 8 位,则实际上不可能有 int8_t 类型。

标签: c++ image embedded png


【解决方案1】:

pitchplaneCount 的值很简单。由于 LodePNG 的 decode 默认为 bitdepth = 8,因此 pitch 的值(以字节为单位)为 1。而且因为图片是RGB,所以planeCount的值是3--每种颜色一个平面。

由于您没有使用 alpha 通道,您可能应该让 LodePNG 直接解码为 RGB 格式:

unsigned error = lodepng::decode(image, width, height, filename, LCT_RGB);

但是一旦图像被解码成std::vector&lt;unsigned char&gt;,就不能直接使用了。 LodePNG 的解码数据格式如下:

image -> R0, G0, B0, R1, G1, B1, R2, G2, B2, ...

但你需要以下格式:

data[0] -> R0, R1, R2, ...
data[1] -> G0, G1, G2, ...
data[2] -> B0, B1, B2, ...

如果内存受限,则必须重新排列图像矢量 (R0, R1, ... Rn, G0, G1, ... Gn, B0, B1, ... Bn) 中的值并计算适当的指针来初始化 data 数组。

如果您有可用的内存,您可以为三个颜色通道中的每一个创建单独的矢量。然后从解码的image 中复制数据,并用指向向量第一个元素的指针初始化data 数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-10
    • 2014-08-22
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多