我正在使用 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].response4-如何对 kp.response 值进行排序,获得 N 个最高 kp.response 值的索引?
1 回答
喵喔喔
TA贡献1735条经验 获得超5个赞
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]
?
添加回答
举报
0/150
提交
取消