2

私のアプリケーションでは、参照によってcv::Matオブジェクトを受け取る関数があります。関数の宣言は次のとおりです。

     void getChains(cv::Mat &img,std::vector<chain> &chains,cv::Mat &ch,char p=0,int sx=0,int sy=0);

この関数は再帰的であり、メイン関数からの最初の呼び出しではaaaは実際には必要ないため、関数呼び出しに渡すために空のaaaを宣言しました。後続の再帰呼び出しでは、関数は独自のchMatオブジェクトを生成します。

std::vector<chain> chains1;
cv::Mat aaa();

getChains(bin1,chains1,aaa);

ただし、コンパイラはエラーを返します。

main.cpp:75:エラー:タイプ'cv :: Mat()'の一時からのタイプ'cv :: Mat&'の非定数参照の無効な初期化aux.h:21:エラー:引数の受け渡し中3 of'void getChains(cv :: Mat&、std :: vector>&、cv :: Mat&、char、int、int)' </ p>

aaa宣言をに変更した場合

        cv::Mat aaa=cv::Mat();

問題なくコンパイルされます。

関数にはバイナリイメージimgが渡され、ピクセルがくっついているすべてのピクセルグループ(チェーン)を取得し、すべてのピクセルの座標をチェーンベクトルに格納します。同様のことを行うopenCV内の既存の関数はおそらくすでにありますか?

ありがとう

4

1 に答える 1

5

これは関数定義です:cv::Mat aaa();。あなたが実際に書きたいのはcv::Mat aaa;

于 2012-10-16T16:43:50.623 に答える