我正在使用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值的索引?
答案 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]
之类的东西?