我尝试比较两个不同图像中的两个点,因此我想将坐标转换为关键点,以便稍后使用它们计算描述和匹配结果。
我找到了方法:
keypoint = cv2.KeyPoint(x, y, 0)
vec = [keypoint]
它可以工作,但结果我每次都能得到:
>>>akaze.compute(image, vec)
([], None)
即使当我获取检测到的关键点时,将它们转换为坐标再返回到关键点(使用上面的结构)也可以得到相同的结果。
那么,如何将给定的坐标转换为关键点(例如KAZE关键点)?
非常感谢!
问候,
狮子座
最佳答案
您创建的主要问题的关键点是为零,为零。根据documentation,KeyPoint
构造函数签名需要3个参数:x和y坐标和大小(即关键点直径)。您将此大小设置为零。
因此,第一个更改是设置关键点直径,即。 e。我认为这应该工作:keypoint = cv2.KeyPoint(x, y, 5)
但事实并非如此。原因是 OpenCV 关键点描述符计算机不接受默认class_id( -1 )的关键点。真的我不知道 class_id 的实际用途是什么(请参阅discussion),但我将其更改为零,只是因为akaze.detect(...)
方法在该字段中返回了关键点的数量(即,第一个关键点为0,第二个关键点为1,依此类推) 。由于相同的原因,我还将大小值设置为 5 -检测点中的这些值从大约 4.8 到 5.7 。
经过这些修改后,一切正常。 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 版本也可以。
关于python - 如何使用OpenCV在Python中将给定坐标转换为KAZE关键点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34104297/