5

可変引数リストを持つ関数を作成しました

void cvShowMatImages( char* title, int nArgs, ...)  // Mat Images

渡す引数は openCV イメージです。私は実際に2つの画像フォーマットIplImageとMatに対して2つの異なる関数を持っています。

void cvShowIplImages( char* title, int nArgs, ...)  // Ipl Images

しかし、2 種類の画像を混在させることはできません。渡された引数のタイプを判別できれば問題を解決できますが、その方法がわかりません。これは私が議論を読む方法です:

// Get the images passed as arguments
va_list args;
// Initialize the variable argument list
va_start( args, nArgs );
// Loop on each image
for ( int num = 0; num < nArgs; num++ )
{
   // Get the image to be copied from the argument list
   srcImg = va_arg( args, Mat );
   ...

IplImage の場合:

srcImg = va_arg( args, IplImage* );

どちらの場合も、srcImg は次のように宣言されます。

Mat srcImg

IplImage のオーバーロードされた operator= があるためです。この問題を解決する方法はありますか?

4

3 に答える 3

0

まず第一に、あなたの貢献に感謝します!

私は C++11 準拠のコンパイラを持っていないので、あなたの提案のいくつかは機能しません。

とにかく、私はかなり単純な解決策を見つけました-それはうまくいくとは思っていませんでした! - IplImage を含む引数を Mat にキャストするだけです!

例:

cvShowMatImages( "all my Ipl and Mat images", 2, myMatImage, (Mat)myIplImage );
于 2013-06-08T00:24:36.537 に答える