我正在使用 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
。它可能有一个文档字符串。
Now I just need to figure out how to use the resulting list as kp indexes
也许像[kp[i] for i in indexes]
?
关于python - 是哪一种列表以及如何操作它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52959927/