如何使用OpenCV在Python中将给定坐标转换为KAZE关键点
我尝试比较两幅不同图像中的两个点,因此我想将坐标转换为关键点,以便稍后使用它们计算描述和匹配结果 我找到了方法:如何使用OpenCV在Python中将给定坐标转换为KAZE关键点,python,opencv,matching,descriptor,Python,Opencv,Matching,Descriptor,我尝试比较两幅不同图像中的两个点,因此我想将坐标转换为关键点,以便稍后使用它们计算描述和匹配结果 我找到了方法: keypoint = cv2.KeyPoint(x, y, 0) vec = [keypoint] 它是有效的,但结果每次我都会: >>>akaze.compute(image, vec) ([], None) 即使我获取检测到的关键点,将它们转换为坐标并返回到关键点(使用上面的结构),我也会得到相同的结果 那么,如何将给定的坐标转换为关键点(例如KAZ
keypoint = cv2.KeyPoint(x, y, 0)
vec = [keypoint]
它是有效的,但结果每次我都会:
>>>akaze.compute(image, vec)
([], None)
即使我获取检测到的关键点,将它们转换为坐标并返回到关键点(使用上面的结构),我也会得到相同的结果
那么,如何将给定的坐标转换为关键点(例如KAZE关键点)?
多谢各位
问候,,
Leo您用零大小创建keypoint的主要问题。根据,
KeyPoint
构造函数签名需要3个参数:x和y坐标和大小(即KeyPoint直径)。您将此大小设置为零
因此,第一个更改是设置关键点直径,即。E我想这应该行得通:
keypoint=cv2.keypoint(x,y,5)
但事实并非如此。原因是OpenCV关键点描述符计算机不接受具有默认类id(-1)的关键点。实际上,我不知道class_id的实际用途是什么(请参阅),但我将其更改为零只是因为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/St>>版本,也可以。 C++中可以使用。这里还应该有Python绑定。非常感谢,效果很好!这对我帮助很大。