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