2012-11-06 41 views
2

我在Mac OS ML下在OpenCV 2.4.2中調用EMD()時遇到問題。OpenCV - Earth Mover的距離問題,ic​​vInitEMD()

我有一類具有這樣的定義的屬性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

我看着源代碼,但無法弄清楚這是什麼失敗。我的論點似乎與文件所要求的一致。任何幫助將不勝感激。

+0

你確定每個成員_signature當你打電話給emd時是否正確分配/設置? – remi

+0

是的,我之前檢查過,現在雙重檢查。 '_signature'是正確的,並且是'size *(dim + 1)',因爲它應該是。 – Olotiar

+0

很難告訴問題是什麼,我猜你可以在Debug中編譯OpenCV並使用調試器進入問題中。 – remi

回答

2

好的,我花了相當長的一段時間才弄明白,但是在我的數據中,有一個是我的向量中的一個元素被錯誤計算,最後是NaN。 當然這物深埋在我的數據,因此,它會通過在一個調試器(甚至cout

來自OpenCV的該神祕的錯誤在困惑我沒有休息合理觀察到任何數量的數據完全丟失。

對於人們在同樣的問題絆倒的我:

  • 確保您的權重向量不爲零
  • 確保您的任何數據是NaN