template<typename>
class cv::GComputationT< typename >
此类是对常规 GComputation 的类型包装器。
std::function<>
类模板参数指定了图的签名,以便对象构造函数、apply()
等方法以及派生的 GCompiledT::operator()
也成为类型化的。
不需要使用 cv::gin() 或 cv::gout() 修饰符来处理此类的对象。相反,所有输入参数都按模板参数签名中的顺序,紧跟在所有输出参数之后。
请参阅以下示例。常规(未类型化)代码按以下方式编写
{
});
std::vector<cv::Mat> u_ins = {in_mat1, in_mat2};
std::vector<cv::Mat> u_outs = {out_mat_untyped};
cvtU.
apply(u_ins, u_outs);
GComputation 类表示捕获的计算图。GComputation 对象形成计算图的边界。...
定义 gcomputation.hpp:121
void apply(GRunArgs &&ins, GRunArgsP &&outs, GCompileArgs &&args={})
动态编译图并立即在输入数据向量上执行它。
GMat 类表示图中的图像或张量数据。
定义 gmat.hpp:68
GMat add(const GMat &src1, const GMat &src2, int ddepth=-1)
计算两个矩阵的逐元素和。
这里
- cv::GComputation 对象使用 lambda 构造函数创建,其中它被定义为一个双输入、单输出图。
- 实际上,它的方法
apply()
接收任意数量的参数(作为向量),因此用户可以在这里传递错误数量的输入/输出。C++ 编译器不会注意到这一点,因为 cv::GComputation API 是多态的,只会产生运行时错误。
现在使用类型化 API 编写相同的代码
{
return m1+m2;
});
cvtT.apply(in_mat1, in_mat2, out_mat_typed1);
cvtTC(in_mat1, in_mat2, out_mat_typed2);
此类是对常规 GComputation 的类型包装器。
定义 gtyped.hpp:85
主要区别在于
- 现在,构造函数 lambda 必须 接受参数并 必须 返回与
GComputationT<>
签名中定义的值相同的值。
- 它的方法
apply()
不需要任何额外的说明符来将输入参数与输出参数分开
GCompiledT
(编译产品)也以没有任何额外说明符的方式接收输入/输出参数。