haar级联训练时bad_alloc()错误

时间:2014-12-10 14:55:22

标签: c++ opencv image-processing haar-classifier

我们一直坚持哈尔级联训练的问题一个星期了。实际上我们正在按照本教程http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html来创建cascade xml文件。 但是在最后一个命令

opencv_traincascade -data classifier -vec samples.vec -bg negatives.txt
-numStages 20 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numPos 45
-numNeg 45 -w 90 -h 100 -mode ALL -precalcValBufSize 1024
-precalcIdxBufSize 1024

我们收到错误:

terminate called after throwing an instance of 'std::bad_alloc'
what(): std:: bad_alloc
Aborted (core dumped)

图像规格为:45张正片和45张负片(尺寸均为90 X 100)。我已确保samples.vec存在于同一文件夹中,并且还尝试使用2048用于precalcValBufSize参数。请帮助我们!

1 个答案:

答案 0 :(得分:4)

你的内存耗尽了。您有几种选择:

  • 使用具有更多内存的64位计算机
  • 使用较小尺寸的正面训练图像。 24x24或32x32是典型的。 64x64被认为是大的。
  • 使用LBP或HOG功能代替Haar。 Haar的功能比其他功能的内存大几个数量级。

顺便说一句,您的负片图像的大小不应与正片图像的大小相同。负片图像应该是包含通常与您感兴趣的对象相关联的背景的大场景。 opencv_traincascade会自动扫描它们以获取有用的负片样本。