OpenCV的对象检测项目

时间:2013-11-20 08:42:02

标签: c++ opencv computer-vision

我正在尝试使用OpenCV为我的最后一年项目制作一个对象识别软件。在对这个领域进行了大量研究之后,我发现行动计划应该是这样的:

  • 从很多图片中提取特征。
  • 从提取的要素中创建训练数据集。
  • 标记数据集。
  • 让机器从数据集中学习。
  • 测试模型。

我从一张图片开始。我能够使用SurfFeatureDetector类OpenCV(样本中给出的simple_matcher.cpp程序)从图像中提取特征。我使用以下代码将检测到的KeyPoints保存在XML文件中:

SurfFeatureDetector detector(400);
vector<KeyPoint> keypoints1, keypoints2;
detector.detect(img1, keypoints1);
detector.detect(img2, keypoints2);
FileStorage fs("test.xml", FileStorage::WRITE);
write(fs, "data", keypoints1);

现在我陷入了困境。我无法理解如何从这些功能创建训练数据集?我的下一步应该是什么?或者,我的行动计划是否正确?

提前致谢。

2 个答案:

答案 0 :(得分:4)

您可能需要执行以下步骤。

  1. 找出并使用您想要使用的特征检测和提取算法(SIFT,SURF,ORB,还有更多)。

  2. 检测并提取功能。你应该在xml文件中存储从描述符提取器中提取的描述符。

  3. 将这些描述符添加到培训师(如bowtrainer)中以创建字典。

  4. 训练您的分类器

  5. 您可以找到很多示例here,如果您想在项目中实现类似内容,则可以观看this视频。

答案 1 :(得分:3)

首先,使用热门数据集会更容易,例如here。它允许您不花时间在图像上,并且可以将您的结果与最新技术进行比较。

其次,这不是一件容易的事。我建议你阅读papers related to the PASCAL VOC

如果你想第一次尝试,请阅读关于词袋模型,例如它很简短,很好地解释了blog of the SO user @gillevi中要做什么。