Создайте объект Halide::Image из существующего двойного массива C++.

У меня есть вопрос об обертывании объекта Halide::Image вокруг уже выделенного массива C++, который определяет двумерное изображение с плавающей запятой двойной точности.

Я уже посмотрел:

массив C++ в образ Halide (и обратно)

Это близко к тому, что я хочу сделать, но меня смущает тип uint8_t хост-члена buffer_t в halide и то, как вы работаете с существующими изображениями, которые не являются uint8_t.

Я вижу, что в приложении размытия, которое использует aot, пример выделяет галоидное изображение, а затем копирует элементы в это галоидное изображение. Я хотел бы сделать это, но без оплаты за копию.

Я не могу использовать load_image, мне нужно работать с существующей, уже выделенной памятью, определенной двойным *.

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;
    }
}

person Alex Taylor    schedule 19.10.2015    source источник


Ответы (1)


Тип uint8_t* поля хоста buffer_t — это просто указатель на любой массив данных. Вы можете указать его на массив float или double. По сути, это указатель void*, который интерпретируется фактическим кодом конвейера. Его интерпретация определяется комбинацией загружаемой из него программы Halide и поля elem_size (которое должно быть, например, sizeof(double) или sizeof(float) для данных с плавающей запятой разных типов).

person jrk    schedule 19.10.2015