从现有的双C ++数组创建Halide :: Image对象

时间:2015-10-19 15:46:00

标签: image initialization halide

我有一个关于在已经分配的C ++数组周围包装Halide :: Image对象的问题,该数组定义了一个二维双精度浮点图像。

我已经看过了:

C++ array to Halide Image (and back)

这与我想要做的很接近,但我对halide中buffer_t的主机成员的uint8_t类型以及如何处理非uint8_t的现有图像感到困惑。

我在使用aot的模糊应用程序中看到,该示例分配了Halide图像,然后将元素复制到此卤化图像中。我想这样做,但不用支付副本。

我不能选择使用load_image,我需要处理由double *定义的已经分配的内存。

Image<uint16_t> input(6408, 4802);

for (int y = 0; y < input.height(); y++) {
    for (int x = 0; x < input.width(); x++) {
        input(x, y) = rand() & 0xfff;
    }
}

1 个答案:

答案 0 :(得分:1)

uint8_t*的主机字段的buffer_t类型只是指向任何数据数组的指针。您可以将其指向floatdouble数组。它基本上是一个void*指针,可以被实际的管道代码重新解释。它的解释取决于从它加载的Halide程序和elem_size字段(对于不同类型的浮点数据应该是sizeof(double)sizeof(float))的组合。