OpenCV - Earth Mover的距离问题,ic​​vInitEMD()

时间:2012-11-06 22:39:00

标签: macos algorithm opencv

我在Mac OS ML下的OpenCV 2.4.2中调用EMD()时遇到问题。

我有一个类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

失败

我查看了源代码,但无法弄清楚这是什么失败。我的论点与文档所需内容相对应。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

好的,我花了很长时间来弄清楚它,但在我的数据中,有一个我的矢量的一个组成部分被错误计算,结果是NaN。 当然,这深埋在我的数据中,因此在通过调试器(甚至cout)可以合理观察的任何数据量中都会完全丢失

OpenCV的神秘错误让其他人感到困惑。

对于像我这样绊倒同一问题的人:

  • 确保您的体重向量不为零
  • 确保您的所有数据都不是NaN