我正在尝试定义一个使用卤化物生成蒙版图像的函数。 有一个缓冲区
Buffer<int> bounding_box;
bounding_box(0, 0) = min_x0;
bounding_box(0, 1) = max_x0;
bounding_box(0, 2) = min_y0;
bounding_box(0, 3) = max_y0;
bounding_box(1, 0) = max_x1;
....
我定义Func Mask(x, y)
等于0到处都是255但如果位于bounding_box中给出的任何框中则为255,bounding_box是动态大小。
尝试使用DRom
但不能成功,因为DRom参数不可变。
答案 0 :(得分:0)
自己想出来。 它可以通过创建定义每个边界框的函数来解决,并合并到最终函数中。
Func mask_stack(x, y, c) = select(x >= bounding_box(c, 0) &&
x <= bounding_box(c, 1) &&
y >= bounding_box(c, 2) &&
y <= bounding_box(c, 3), 255, 0)
RDom r(0, bounding_box.width());
Func mask(x, y) = 0;
mask(x, y) = Halide::max(mask(x, y), mask_stack(x, y, r));
Halide::Buffer<int> input_buf = mask.realize(image_width, image_height);