我在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
我查看了源代码,但无法弄清楚失败的原因。我的论据与文档要求相对应。任何帮助将不胜感激。

最佳答案

好的,我花了很多时间才弄清楚,但是在我的数据中,我的一个 vector 的一个分量被错误地计算了,最终变成了NaN
当然,这已深埋在我的数据中,因此,通过调试器(甚至是cout)可以合理观察到的任何数量的数据都将完全丢失它们。

来自OpenCV的神秘错误使我感到困惑。

对于绊倒我的人来说:

  • 确保您的权重 vector 不为零
  • 确保所有数据都不是NaN
  • 10-08 10:47