OpenCV:如何使用opencv_createsamples和opencv_traincascade

时间:2016-01-26 13:13:43

标签: ios opencv detection opencv3.0

在我的项目中,我需要识别欧元硬币,有人建议我使用OpenCV分类器和训练算法。所以我下载了OpenCV的3.1版本,我试图让它开始。我想知道一些我不能从教程中理解的内容(我所关注的内容是来自OpenCV官方文档的thisthisthis)。

首先,是否必须生成并考虑负样本?如果是,那是什么"对象"我应该考虑否定?在我的应用程序中,我应该检测并识别欧元硬币所以...我应该从任何其他随机类型的对象创建负片吗?

其次,我的应用程序应该识别2€,1€和0.50€硬币。那么,我应该用opencv_createsamples生成多少个正样本?每个硬币(正面和背面)一个或所有3种硬币的独特硬币?如果我理解得很好,那么我将会有一些.xml文件,我应该将这些文件包含在我的iOS应用程序项目中,对吧?

最后,detectMultiScale()不仅会检测到硬币而且会检测硬币吗?这就是为什么我认为我需要的不仅仅是分类器文件,以区分右侧并区分硬币的价值。

希望我没有写过太宽泛的问题,谢谢你的关注。

2 个答案:

答案 0 :(得分:0)

关于否定(或背景)示例,请考虑欧元币将在图像中的哪个背景,最终您的程序必须处理。例如,如果他们与非欧元一起在桌子上,使用桌面(没有硬币)作为底片。如果你想在人们持有它们的图像上发现它们,可以用手作为底片等。

关于第二个问题 - 我也在寻求有关这方面的建议。我想这取决于您需要识别的功能的复杂性以及背景的复杂性。我成功地训练了一个有40个圆形正面的分类器,但完全没能用60(空中)牛图像训练分类器。

关于你的第三个问题,我认为(未经测试!)取决于你的识别需求:如果你只是想发现一枚欧元硬币,你可以用一个分类器来训练所有硬币的图像来自各方面。如果你想区分硬币,可以创建不同的分类器,每个硬币的图像来自各个方面。如果你甚至需要区分正面和背面,你必须为每枚硬币的每一面创建一个分类器。

答案 1 :(得分:0)

是的,负面样本是强制性的,同样是的,您可以拥有随机对象的图像,但是您需要拥有大量的图像,因此我建议您使用视频来提取其框架或网站,例如this

接下来,您需要为您的硬币准备好样本。积极硬币的数量越多,结果就越准确。您可以做的一件事就是拍摄2-3张硬币图像,并在每次叠加时通过改变角度将它们强加在负片上。这样,如果您说500张负像和2张硬币的正片,叠加后将有1000张正片。 opencv_createsamples脚本负责所有这些。