如何使用 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 关键点)?
非常感谢!
此致,
狮子座
您创建的关键点大小为 零 的主要问题。根据documentation,KeyPoint
构造函数签名需要3个参数:x和y坐标和大小(这是关键点直径)。您将此 size 设置为零。
因此第一个变化是设置关键点直径,i。 e.我认为这应该有效:
keypoint = cv2.KeyPoint(x, y, 5)
但事实并非如此。原因是 OpenCV 关键点描述符计算机不接受默认的关键点 class_id (-1).我真的不知道 class_id 的实际目的是什么(参见 discussion),但我将其更改为零只是因为 akaze.detect(...)
方法 returns 该字段中关键点的数量(即 0 用于第一个关键点,1 用于第二个,依此类推)。由于同样的原因,我还将 size 值设置为 5 - 检测点中的这些值来自大约 4.8 至 5.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 版本也可以。
我想比较两个不同图像中的两个点,所以我想将坐标转换为关键点,以便稍后用它们计算描述和匹配结果。
我找到了方法:
keypoint = cv2.KeyPoint(x, y, 0)
vec = [keypoint]
它有效,但结果我每次都得到:
>>>akaze.compute(image, vec)
([], None)
即使我获取检测到的关键点,将它们转换为坐标并返回关键点(使用上面的结构),我也会得到相同的结果。
那么,如何将给定坐标转换为关键点(例如 KAZE 关键点)? 非常感谢!
此致, 狮子座
您创建的关键点大小为 零 的主要问题。根据documentation,KeyPoint
构造函数签名需要3个参数:x和y坐标和大小(这是关键点直径)。您将此 size 设置为零。
因此第一个变化是设置关键点直径,i。 e.我认为这应该有效:
keypoint = cv2.KeyPoint(x, y, 5)
但事实并非如此。原因是 OpenCV 关键点描述符计算机不接受默认的关键点 class_id (-1).我真的不知道 class_id 的实际目的是什么(参见 discussion),但我将其更改为零只是因为 akaze.detect(...)
方法 returns 该字段中关键点的数量(即 0 用于第一个关键点,1 用于第二个,依此类推)。由于同样的原因,我还将 size 值设置为 5 - 检测点中的这些值来自大约 4.8 至 5.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 版本也可以。