Работа с кортежами в Halide

Я хочу извлечь один канал в Halide,

Halide::Image<uint8_t> input = load_image("images/rgb.png");
Halide::Var x, y;
Halide::Func green;
green(x,y)= {0, input(x, y, 1), 0};

Halide::Image<uint8_t> output =
        green.realize(input.width(), input.height());

дает

Может приводить только одноэлементные реализации к буферам или изображениям.

это должно быть просто

2 ответа

Звучит так, как будто вы хотите трехканальный выход, в котором все два равны нулю, а один - содержимое соответствующего канала входного изображения. Для этого попробуйте:

   green(x, y, c) = select(c == 1, input(x, y, 1), 0);

Если это развернуто и ограничено, в выполнении не будет условной оценки.

Я думаю, что вы хотите:

green(x, y) = input(x, y, 1);

У вас есть набор из трех выходных изображений, два из которых равны нулю.

Другие вопросы по тегам