OpenCV的对象检测项目

Object Detection project with OpenCV

本文关键字:项目 检测 对象 OpenCV      更新时间:2023-10-16

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

  • 从大量图像中提取特征
  • 根据提取的特征创建训练数据集
  • 标记数据集
  • 让机器从数据集中学习
  • 测试模型

我从一张图片开始。我能够使用OpenCV的SurfFeatureDetector类(示例中给出的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);

现在我陷入了困境。我不明白如何根据这些功能创建训练数据集?我的下一步应该是什么?或者,我的行动计划正确吗?

提前谢谢。

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

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

  2. 检测和提取特征。您应该将从描述符提取器提取的描述符存储在xml文件中。

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

  4. 训练你的分类器

你可以在这里找到很多例子,如果你想在你的项目中实现类似的东西,你可以观看这个视频。

首先,使用流行的数据集会更容易,例如,从这里开始。它可以让你不用花时间在图像上,并可以将你的结果与最先进的技术进行比较。

其次,这不是一项容易的任务。我建议你阅读与PASCAL VOC相关的论文。

如果你想做第一次尝试,请阅读单词袋模型,例如,它在SO用户@gillevi的博客中非常简短和漂亮地解释了该做什么。