OpenCV 4.11.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 构造函数创建的,其中它被定义为一个双输入、单输出图。
  • 事实上,它的 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(编译产品)也无需额外的说明符即可接收输入/输出参数。

此类的文档是从以下文件生成的