我在 openCV 2.4.3 中运行 Haar 培训。
- 我有 10 张负片和大约 30 张正片(我知道数量很少)。
- 正样本组织在“vec”文件中,负(背景)图像由存储图像路径的文本文件描述。
- 对于如此少量的图像,存在一个完美的解决方案(所有背景图像都被归类为假,真实样本为真)。
当找到这个完美的解决方案时,openCV 进入icvGetHaarTrainingData()
函数内部的无限循环。
它想找到级联失败的背景图像,但没有更多这样的图像,所以这个函数for(;;)
永远卡在循环中。
icvGetBackgroundImage()
在此循环中调用的函数只是不断从硬盘加载相同的图像,这些图像被级联拒绝。
有人知道我可以应用补丁或错误修复来解决这个问题吗?
我想出的一种可能的解决方法是让icvGetBackgroundImage()
每个文件只加载一次,因为如果它被级联拒绝一次,它总是会被拒绝。但这是一个错误的调整,因为相同的函数用于生成“vec”文件,cvCreateSamples()
在这种情况下,我们确实希望它多次加载相同的文件。
第二个可能的修复 - 在 vec 文件中使用负面示例(如正面示例)而不是信息路径格式。这是一种通过不激活有问题的回调来克服无限循环的方法,但结果是导致崩溃的 openCV 错误。当负'vec'文件到达EOF时会发生这种情况。
同时我通过直接更改openCV的源代码并重新编译二进制文件解决了这两个错误(无限循环和崩溃)。我会尽快将我的更改提交给 openCV 委员会。但我不敢相信我是唯一一个遇到这种问题的人......