我在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
我查看了源代码,但无法弄清楚这是什么失败。我的论点与文档所需内容相对应。任何帮助将不胜感激。
答案 0 :(得分:2)
好的,我花了很长时间来弄清楚它,但在我的数据中,有一个我的矢量的一个组成部分被错误计算,结果是NaN
。
当然,这深埋在我的数据中,因此在通过调试器(甚至cout
)可以合理观察的任何数据量中都会完全丢失
OpenCV的神秘错误让其他人感到困惑。
对于像我这样绊倒同一问题的人:
NaN