如何使用 OpenCV 将给定坐标转换为 Python 中的 KAZE 关键点

How to convert given coordinates to KAZE Keypoints in Python with OpenCV

我想比较两个不同图像中的两个点,所以我想将坐标转换为关键点,以便稍后用它们计算描述和匹配结果。

我找到了方法:

 keypoint = cv2.KeyPoint(x, y, 0)
 vec = [keypoint]

它有效,但结果我每次都得到:

 >>>akaze.compute(image, vec)
 ([], None)

即使我获取检测到的关键点,将它们转换为坐标并返回关键点(使用上面的结构),我也会得到相同的结果。

那么,如何将给定坐标转换为关键点(例如 KAZE 关键点)? 非常感谢!

此致, 狮子座

您创建的关键点大小为 的主要问题。根据documentationKeyPoint构造函数签名需要3个参数:xy坐标和大小(这是关键点直径)。您将此 size 设置为零。

因此第一个变化是设置关键点直径,i。 e.我认为这应该有效:

keypoint = cv2.KeyPoint(x, y, 5)

但事实并非如此。原因是 OpenCV 关键点描述符计算机不接受默认的关键点 class_id (-1).我真的不知道 class_id 的实际目的是什么(参见 discussion),但我将其更改为零只是因为 akaze.detect(...) 方法 returns 该字段中关键点的数量(即 0 用于第一个关键点,1 用于第二个,依此类推)。由于同样的原因,我还将 size 值设置为 5 - 检测点中的这些值来自大约 4.85.7.

这些修改之后一切都OK了,我。 e.此代码:

keypoints = [cv2.KeyPoint(x, y, 5, _class_id=0)]
akaze = cv2.AKAZE_create("AKAZE")
akaze.compute(image, keypoints)

在我的案例中给出了正确的结果(OpenCV 3.0.0)。我想 2.4.x 版本也可以。