我在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
}
}
然后,我有该类的
u
和v
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的神秘错误使我感到困惑。
对于绊倒我的人来说:
NaN