Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用OpenCV在Python中将给定坐标转换为KAZE关键点_Python_Opencv_Matching_Descriptor - Fatal编程技术网

如何使用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.85.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绑定。非常感谢,效果很好!这对我帮助很大。