2

EMD()MacOSMLでOpenCV2.4.2を呼び出すのに問題があります。

Mat _signature私はそのように定義された属性を持つクラスを持っています:

Mat _signature(size,dim+1,CV_32F);
for (int i = 0; i<size; ++i){
    _signature.at<float>(i,0) = weight;
    for (int j = 1; j < dim+1; ++j){
       _signature.at<float>(i,j) = vec[i].at<float>(0,j-1); // vec[i] is a line vector containing the position in R^dim
    }
}

次にuvそのクラスのインスタンスが2つあり、EMD(u._signature, v._signature, CV_DIST_L2);

それは失敗しますOpenCV Error: One of arguments' values is out of range () in icvInitEMD, file /*SOME PATH*/OpenCV-2.4.2/modules/imgproc/src/emd.cpp, line 408

私はソースコードを見ましたが、これが何が失敗するのか理解できませんでした。私の議論は、ドキュメンテーションが望んでいることに対応して現れます。どんな助けでもありがたいです。

4

1 に答える 1

2

わかりました、それを理解するのにかなりの時間がかかりましたが、私のデータの中に、誤って計算された私のベクトルの1つのコンポーネントがあり、結局はNaNでした。もちろん、これは私のデータの奥深くに埋め込まれているため、デバッガー(またはcout)を介して合理的に観察できるデータ量では完全に失われます。

OpenCVからの不可解なエラーは、私を混乱させる残りの部分を行いました。

私と同じ問題に遭遇した人のために:

  • 重みベクトルがゼロでないことを確認してください
  • データがないことを確認してくださいNaN
于 2012-11-12T20:31:08.827 に答える