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(編譯產物)也接受輸入/輸出引數,而無需額外的說明符。

此類文件由以下檔案生成