python - 是哪一种列表以及如何操作它?

标签 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- 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/

相关文章:

visual-c++ - 未处理的异常,使用Visual c++的opencv cvCaptureFromCAM中的访问冲突

video - 开源镜头检测实现?

swift - 用于对象搜索的 CoreML

python - 使用 Pygame 制作多个 'game screens'

c++ - 在 OpenCV 中测试 parallel_for_ 性能

python - opencv::cuda GpuMat CV_8UC1到CV_32FC1转换黑色图像

python - 用未分割的部分替换图像的分割部分

python - 在 Django 中搜索表中的所有字段

python - 在规定时间内完成画圆

python - 在 python 中,使用 lambda 将空列表添加到数据框列会引发 valueError