最近在使用OpenCV自带的SVM分类器进行分类模型训练时,由于输入的数据量有6万多行,每
一行有256*256个数据,所以程序运行到2万多行时Linux便提示了内存溢出问题;
在对OpenCV源代码进行跟踪时,追踪到下面这段程序:
for( i = 0; i < sample_count; i++){
samples[i] = (float*)(data + (s_idx? s_idx[i] : i) * s_step);
}
代码的具体位置为opencv-2.4.10/modules/ml/src/inner_functions.cpp中的cvGetTrainSamples函数
由于s_step是int型变量,所以当需要表示的数据超过了其能表示的最大数据范围,便对对数据进行截断,
从而产生错误,这里的解决方式为将int修改为unsigned int,之后程序便正常运行。