哪种类型的列表以及如何操作?

时间:2018-10-24 01:31:32

标签: python opencv computer-vision

我正在使用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 个答案:

答案 0 :(得分:1)

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索引

也许像[kp[i] for i in indexes]之类的东西?