opencv中类cv :: KeyPoint的类成员class_id的含义和用法是什么?

时间:2013-07-31 21:15:28

标签: opencv image-processing image-segmentation object-detection keypoint

在OpenCV 2.4.3的参考手册中,KeyPoint::class_id被描述为“可用于由它们所属的对象聚集关键点的对象ID”。

由于缺乏对“关键点”的充分了解,我无法理解class_id的目的是什么。

我的另一个问题是,通过使用特征检测器,描述符和匹配器,我们可以检测训练图像中查询对象的匹配关键点。但是如何在训练图像中分割出查询对象。我们可以使用抓取或分水岭算法吗?如果有,怎么样?

回答任何一个问题都会有所帮助。

提前致谢...

2 个答案:

答案 0 :(得分:3)

实际上,class_id成员字段可用于存储您发现对每个关键点有用的任何信息。正如文档所述,您可以存储检测到的对象的id。

例如,您有一个图像,从中提取关键点(例如使用SURF),运行具有这些功能的一些对象检测器,结果是每个输入要素现在包含class_id对应的id对象,如果它们没有附加到任何对象,则返回-1。我实际上并不知道这个字段是否被某些OpenCV函数填充,或者只是供您使用。

关于第二个问题,匹配功能可能不足以分割您的对象,因为功能可以位于对象内部,因此您无法获得有关轮廓的任何信息。但是,如果您有关于该对象的更多信息,这是一个很好的起点。例如,如果您知道对象是平面(墙上的海报),则可以使用要素匹配来计算输入和训练图像之间的单应性。这会给你一个大纲。或者,例如,大量紧密匹配的特征可以指示对象的存在。由此,您可以尝试其他颜色分割,边缘匹配等。

答案 1 :(得分:0)

我找到了一些关键点class_id的简短说明。

OpenCV说:

class_id是对象ID,可用于通过它们所属的对象对关键点进行聚类。

以下是link.

希望这会有所帮助。