OpenCV 4.12.0
开源计算机视觉
加载中...
搜索中...
无匹配项
cv::GComputationT< typename > 类模板参考

此类是常规 GComputation 的类型化包装器。更多...

cv::GComputationT< typename > 的协作图

详细描述

template<typename>
class cv::GComputationT< typename >

此类是常规 GComputation 的类型化包装器。

类似 std::function<> 的模板参数指定了图签名,因此对象构造函数、apply() 等方法以及派生的 GCompiledT::operator() 也变为类型化的。

使用此类的对象时,无需使用 cv::gin()cv::gout() 修饰符。相反,所有输入参数都跟在所有输出参数之后,顺序来自模板参数签名。

请参阅以下示例。常规(非类型化)代码是这样编写的

// 非类型化 G-API ///////////////////////////////////////////////////////////
cv::GComputation cvtU([]()
{
cv::GMat in1, in2;
cv::GMat out = cv::gapi::add(in1, in2);
return cv::GComputation({in1, in2}, {out});
});
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);

在这里

  • cv::GComputation 对象是使用 lambda 构造函数创建的,lambda 构造函数将其定义为两输入、一输出图。
  • 它的方法 apply() 实际上接受任意数量的参数(作为向量),因此用户可以在这里传递错误的输入/输出数量。C++ 编译器不会注意到这一点,因为 cv::GComputation API 是多态的,并且只会生成运行时错误。

现在使用类型化 API 编写相同的代码

// 类型化 G-API /////////////////////////////////////////////////////////////
{
return m1+m2;
});
cvtT.apply(in_mat1, in_mat2, out_mat_typed1);
auto cvtTC = cvtT.compile(cv::descr_of(in_mat1), cv::descr_of(in_mat2));
cvtTC(in_mat1, in_mat2, out_mat_typed2);

关键区别在于

  • 现在,构造函数 lambda 必须接受 参数,并且 必须返回 GComputationT<> 签名中定义的值。
  • 它的方法 apply() 不需要任何额外的说明符来区分输入参数和输出参数
  • GCompiledT(编译产物)也接受输入/输出参数,而无需额外的说明符。

此类文档由以下文件生成