4

我在 openCV 2.4.3 中运行 Haar 培训。

  1. 我有 10 张负片和大约 30 张正片(我知道数量很少)。
  2. 正样本组织在“vec”文件中,负(背景)图像由存储图像路径的文本文件描述。
  3. 对于如此少量的图像,存在一个完美的解决方案(所有背景图像都被归类为假,真实样本为真)。

当找到这个完美的解决方案时,openCV 进入icvGetHaarTrainingData()函数内部的无限循环。

它想找到级联失败的背景图像,但没有更多这样的图像,所以这个函数for(;;)永远卡在循环中。

icvGetBackgroundImage()在此循环中调用的函数只是不断从硬盘加载相同的图像,这些图像被级联拒绝。

有人知道我可以应用补丁或错误修复来解决这个问题吗?

我想出的一种可能的解决方法是让icvGetBackgroundImage()每个文件只加载一次,因为如果它被级联拒绝一次,它总是会被拒绝。但这是一个错误的调整,因为相同的函数用于生成“vec”文件,cvCreateSamples()在这种情况下,我们确实希望它多次加载相同的文件。

第二个可能的修复 - 在 vec 文件中使用负面示例(如正面示例)而不是信息路径格式。这是一种通过不激活有问题的回调来克服无限循环的方法,但结果是导致崩溃的 openCV 错误。当负'vec'文件到达EOF时会发生这种情况。

同时我通过直接更改openCV的源代码并重新编译二进制文件解决了这两个错误(无限循环和崩溃)。我会尽快将我的更改提交给 openCV 委员会。但我不敢相信我是唯一一个遇到这种问题的人......

4

1 回答 1

0

在此处发布固定代码。请注意,原始的 openCV 许可证也适用于它。 https://github.com/DanielHsH/OpenCV-HaarTraining-BugFix

于 2015-11-02T08:43:04.387 回答