【发布时间】:2013-12-03 04:24:39
【问题描述】:
我在 OpenCV 中使用随机森林时遇到了这个错误:
OpenCV Error: Bad argument (5273-th value of 220-th (ordered) variable (=-1.70141e+38) is too large) in CvDTreeTrainData::set_data, file /home/XXX/Downloads/opencv-2.4.6.1/modules/ml/src/tree.cpp, line 551
terminate called after throwing an instance of 'cv::Exception'
what(): /home/XXX/Downloads/opencv-2.4.6.1/modules/ml/src/tree.cpp:551: error: (-5) 5273-th value of 220-th (ordered) variable (=-1.70141e+38) is too large in function CvDTreeTrainData::set_data
Aborted (core dumped)
很奇怪,因为打印出来的数字没有超出浮点数范围 (-3.4E+38 到 +3.4E+38)
我发现opencv的源代码中打印在哪里,但我无法理解问题所在:
文件是tree.cpp
for( i = 0; i < sample_count; i++ )
{
float val = ord_nan;
int si = sidx ? sidx[i] : i;
if( !mask || !mask[(size_t)si*m_step] )
{
if( idata )
val = (float)idata[(size_t)si*step];
else
val = fdata[(size_t)si*step];
if( fabs(val) >= ord_nan )
{
sprintf( err, "%d-th value of %d-th (ordered) "
"variable (=%g) is too large", i, vi, val );
CV_ERROR( CV_StsBadArg, err );
}
num_valid++;
}
if (is_buf_16u)
udst[i] = (unsigned short)i; // TODO: memory corruption may be here
else
idst[i] = i;
_fdst[i] = val;
}
谁能给我一个提示?
【问题讨论】:
-
您的帖子中可能有错误,因为您显示的是 ~400 行,但您的错误消息显示的是第 551 行。
-
你是对的,但是代码是从互联网上获取的,我还检查了我机器上编译的opencv的来源,它是一样的。不过谢谢。
标签: c++ linux opencv random-forest