我正在使用OpenCV通过这种方式检测BRISK关键点:

img = cv2.imread(image_path)
gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
kp, descriptors = cv2.BRISK_create().detectAndCompute(gray,None)

kp是一个列表,但是,它也是一种结构。它具有参数或“子列表”,例如kp.pt值kp。响应值等。我是Python的新手,所以我想知道以下内容。

1-此列表是否有特定名称?它似乎不是我习惯于在Python中使用的列表。如何获取有关此类列表的更多信息?

2-我怎么知道kp的其他参数(或“子列表”)是什么?我可以用Python打印它们吗?

3-如何在变量中保存例如kp.response的所有元素?我只能索引像kp [1] .response这样的单个元素

4-如何排序kp.response值,以获得N个最高kp.response值的索引?

最佳答案

1- type(kp)这获取对象是其实例的类。

2- dir(kp)这应该列出对象的属性。对于某些响应访问尝试而动态生成其属性的非常动态的类型,这可能不起作用。 (但是仍然可以,因为dir也可以动态生成。)

在这种情况下,如果您可以在类的源代码中找到__getattr__方法,则可能会为您提供这些动态属性实际存储位置的线索。

3- [e.response for e in kp]可能。通常,如果像这样可索引,它也是可迭代的。

4- print([i for _, i in sorted((e.response, i) for i, e in enumerate(kp))[-N:]])尚未测试。

也尝试help(kp),它可能会解释如何更好地使用它。在您不了解的任何地方使用help。它可能有一个文档字符串。



也许像[kp[i] for i in indexes]一样?

08-24 23:20