不能在图像中计算alpha
Not able to compute alpha in image
我尝试用Halide编写简单的图像计算程序。所以我从亮度函数开始。
I got this
Halide::ImageParam img(Halide::type_of<float>(), 3);
img.set_stride(0, 4);
img.set_stride(2, 1);
Halide::Func f;
Halide::Var x, y, c;
Halide::Param<float> brightnesMod;
f(x, y, c) = img(x,y,c) * brightnesMod;
f.vectorize(x, 16).parallel(y);
auto & obuff = f.output_buffer();
obuff.set_stride(0, 4);
obuff.set_stride(2, 1);
std::vector<Halide::Argument> arguments = { img, brightnesMod };
f.compile_to_file("function", arguments);
return 0;
但是我有一个问题。我的图像是RGBA图像,所以我用alpha计算算法。如何跳过它,改变f(x,y,c)使c只有0-2?
这意味着您希望c的输出范围为3。和其他维度一样,它有最小值和范围。你的输入是RGBA,所以4通道-它的c范围是4。
将产生多少颜色通道,取决于您调用管道时请求的范围。
你可以使用:
obuff.set_extent(c, 3);
如果你想强制通道数为3,如果你尝试请求多于或少于3个通道,将会导致错误。
正如Sander所说,您只需要求第三维度的范围为3而不是4,在这种情况下,通过传入该维度的范围为3的输出缓冲区。如果您只想要3通道输出缓冲区,您可能还希望将颜色通道上的stride设置为3(在您的示例中为set_stride(0,3),因为您似乎想要交错的RGB数据)。如果你想要一个RGBA输出缓冲区,但在计算过程中忽略alpha,你可以将步幅设置为4,但将范围设置为3。
另一个注意事项:使用平面存储,而不是交错存储,将在x维度上提供更好的向量化性能,就像你在这里做的那样。一般来说,向量化(到目前为止)在最内层/最密集的存储维度上效果最好,特别是对于如此简单的计算。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- C++如何计算用户输入的数字中的偶数位数
- 如何计算数据类型的范围,例如int
- 类似枚举的计算常量
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 计算缩放多边形的比例,得到给定的多边形面积
- 在C++中如何在没有pow的情况下进行基础计算
- 计算平均值,不包括上次得分
- 不能在图像中计算alpha