0

以前はCAPIを使用していましたが、現在はC ++APIopencvに移行しています。以下は、通過しないもののいくつかです。マットでの条件式のある種のエラーを言います。C APIを使用すると、すべてが正常に見えます。

/// Initialize (C API)
vector<IplImage*> storeImg;

storeImg.pushback(...);

if( storeImg.at(i) == storeImg.at(0) )//no error

/// Initialize (C++ API)
vector<Mat> storeImg;

storeImg.pushback(...);

/// To use it
if( storeImg.at(i) == storeImg.at(0) )//error: conditional expression is illegal

これに対する他の回避策はありますか?

4

3 に答える 3

0

これについてはよくわかりませんが、テストしたところ、動作し、検証されました。

if(storeImg[i].data == storeImg[0].data)
于 2013-02-26T08:33:33.030 に答える
0

どのような比較を意図しているかを明確にしてください。

を取得した場合はvector<IplImage*> storeImg( storeImg[0]==storeImg[7] )POINTERS のみを比較します。

vector<Mat> storeImg同じ式が構造体全体を比較しようとするため、これは実際には違法です。

CONTENT(pixels) が等しいかどうかを確認しますか?

それは次のようになります:sum( storeImg[0] - storeImg[7] ) == 0

それでもポインターを比較したい場合( storeImg[0].data == storeImg[7].data )は、cv:Mat のケースで機能する可能性がありますが、そこに他のマットの clone() がある場合は失敗します

于 2013-02-26T10:47:54.950 に答える
0

このように storeImg のインデックスにアクセスする必要があります

storeImg[i]

インデックスに格納されている Mat の要素にアクセスしたい場合は、呼び出すことができます

storeImg[i].at<float>(j)
于 2013-02-26T04:38:12.663 に答える