0

1 つのチャネル化された画像の dft を作成しようとしていますが、cvDft は複雑な値を想定しているため、元の画像をすべて 0 の別の画像とマージするようにアドバイスされたため、この最後の画像は虚数部と見なされます。

私の問題は、cvmerge 関数を使用するときに発生します。

Mat tmp = imread(filename,0);

if( tmp.empty() )
    {cout << "Usage: dft <image_name>" << endl;
    return -1;}
Mat Result(tmp.rows,tmp.cols,CV_64F,2);
Mat tmp1(tmp.rows,tmp.cols,CV_64F, 0);
Mat image(tmp.rows,tmp.cols,CV_64F,2);
cvMerge(tmp,tmp1,image);`

それは私に次のエラーを与えます: cvMAt を cvArr に変換できません

誰でも私を助けることができますか?ありがとう!

4

1 に答える 1

1

1)2つの異なるスタイルのopencvコードを混同しているようです cv::Mat(-Mat)は、opencvの新しいバージョンのc ++クラスであり、opencvcvMergeの古いバージョンのac関数です。

マージcvmergeを使用する代わりに

tmp2)タイプCV_8U(おそらく)の行列 ( ) を、 convertToCV_64Fを 使用して CV_64Fとして tmp を取得しようとしている

3) Result&imageマット (宛先マット) が に初期化されるのはcv::Scalar(2)なぜですか? コンストラクターのパラメーターを誤用していると思います。詳しくはこちらをご覧ください。

4)imageマットがシングル チャネル マットであり、2 チャネル マットとして使用したい場合 (質問で述べたように)、宣言を次のように変更します。

Mat image(tmp.rows,tmp.cols,CV_64FC2);
于 2011-11-30T13:08:06.720 に答える