C++11 在卤化物中使用元组

C++11 在卤化物中使用元组,c++11,halide,C++11,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()); Hal

我想提取一个卤化物通道

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());
Halide::Image input=load_Image(“images/rgb.png”);
卤化物:Var x,y;
卤化物::Func绿;
绿色(x,y)={0,输入(x,y,1),0};
卤化物::图像输出=
green.realize(input.width(),input.height());
给予

只能将单个元素实现强制转换为缓冲区或映像

它必须很简单

我想你想要:

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

您拥有的东西创建了三个输出图像的元组,其中两个为零。

听起来您想要一个三通道输出,其中两个都为零,一个是输入图像对应通道的内容。要执行此操作,请尝试:

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

如果这是展开和有界的,则执行过程中将不会有条件求值。

否我想要彩色图像,只有绿色通道值>0您的代码提取一个通道并给出灰色图像(用相同的值填充所有3个通道)。在教程中,不鼓励使用“选择”在这种情况下,它还会为c=0到3{y=0到高度{x=0到宽度{}}生成难看的代码。你可能是指教程中的这个注释13://2)它需要一个select,如果没有//bounded and unrolled://brighter.bound(c,0,3)。unroll(c);基本上都是我写的。您必须绑定c维度并展开该维度上的循环。您也可以使用类似“input(x,y,c)*(c==1)”这样的表达式,但如果这样可以生成更好的代码,我会感到惊讶。