在OpenCV 2.4.3的参考手册中,KeyPoint::class_id
被描述为“可用于由它们所属的对象聚集关键点的对象ID”。
由于缺乏对“关键点”的充分了解,我无法理解class_id
的目的是什么。
我的另一个问题是,通过使用特征检测器,描述符和匹配器,我们可以检测训练图像中查询对象的匹配关键点。但是如何在训练图像中分割出查询对象。我们可以使用抓取或分水岭算法吗?如果有,怎么样?
回答任何一个问题都会有所帮助。
提前致谢...
答案 0 :(得分:3)
实际上,class_id
成员字段可用于存储您发现对每个关键点有用的任何信息。正如文档所述,您可以存储检测到的对象的id。
例如,您有一个图像,从中提取关键点(例如使用SURF),运行具有这些功能的一些对象检测器,结果是每个输入要素现在包含class_id
对应的id对象,如果它们没有附加到任何对象,则返回-1。我实际上并不知道这个字段是否被某些OpenCV函数填充,或者只是供您使用。
关于第二个问题,匹配功能可能不足以分割您的对象,因为功能可以位于对象内部,因此您无法获得有关轮廓的任何信息。但是,如果您有关于该对象的更多信息,这是一个很好的起点。例如,如果您知道对象是平面(墙上的海报),则可以使用要素匹配来计算输入和训练图像之间的单应性。这会给你一个大纲。或者,例如,大量紧密匹配的特征可以指示对象的存在。由此,您可以尝试其他颜色分割,边缘匹配等。
答案 1 :(得分:0)