OpenCV 4.13.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 4.13.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
cv::GComputationT< typename > クラステンプレート

通常の GComputation に型付けを施したラッパクラス。 続き...

Collaboration diagram for cv::GComputationT< typename >:

詳細説明

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

通常の GComputation に型付けを施したラッパクラス。

std::function<> のようなテンプレート引数がグラフのシグネチャを指定するため、オブジェクトのコンストラクタや apply() などのメソッド、派生クラスの GCompiledT::operator() も型付けされる。

このクラスのオブジェクトでは cv::gin()cv::gout() 修飾子を使う必要はない。代わりに、すべての入力引数の後に、テンプレート引数のシグネチャ順ですべての出力引数が続く。

以下の例を参照のこと。通常の(型付けされていない)コードは次のように書く。

// Untyped 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 オブジェクトはラムダコンストラクタで生成され、2入力1出力のグラフとして定義されている。
  • そのメソッド apply() は実際には任意個の引数(ベクトルとして)を取るため、ユーザが誤った数の入出力を渡してしまうことがある。cv::GComputation APIは多態的であるため、C++コンパイラはそれに気付かず、実行時エラーが生成されるだけである。

次に、同じコードを型付けAPIで書いたもの。

// Typed 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);

主な違いは次のとおり。

  • 型付けされたコンストラクタのラムダは、GComputationT<> のシグネチャで定義されたとおりに、引数を必ず受け取り、値を必ず返さなければならない
  • そのメソッド apply() は、入力引数と出力引数を区別するための追加の指定子を必要としない
  • GCompiledT(コンパイル成果物)も同様に、追加の指定子なしで入出力引数を取る。

このクラス詳解は次のファイルから抽出されました: