2016-09-29 85 views
1

在OpenCV的3 goodFeaturesToTrack返回以下形式NumPy的数组列表转换

[[[1, 2]] 
[[3, 4]] 
[[5, 6]] 
[[7, 8]]] 

的阵列阵列转换成Python列表后,将函数I得到

[[[1, 2]], [[3, 4]], [[5, 6]], [[7, 8]]] 

虽然这是一个列表,如果你看到它有一对括号比它应该当我试图通过A [0] [1]访问一个元素,我得到一个错误。为什么数组和列表具有这种形式?我应该如何解决它?

回答

1

因为你已经在第二轴一个元素的三维数组:

In [26]: A = [[[1, 2]], [[3, 4]], [[5, 6]], [[7, 8]]] 

In [27]: A[0] 
Out[27]: [[1, 2]] 

而当你想通过A[0][1]访问第二项就提出了一个IndexError:

In [28]: A[0][1] 
--------------------------------------------------------------------------- 
IndexError        Traceback (most recent call last) 
<ipython-input-28-99c47bb3f368> in <module>() 
----> 1 A[0][1] 

IndexError: list index out of range 

您可以使用np.squeeze()为了减小尺寸,并将阵列转换为二维阵列:

In [21]: import numpy as np 

In [22]: A = np.array([[[1, 2]], [[3, 4]], [[5, 6]], [[7, 8]]]) 

In [33]: A = np.squeeze(A) 

In [34]: A 
Out[34]: 
array([[1, 2], 
     [3, 4], 
     [5, 6], 
     [7, 8]]) 
+0

你呢!这正是我想要的。出于好奇的一个问题。为什么该功能创建了一个3D数组呢? – Adam

+0

@Adam我认为这是'goodFeaturesToTrack'的功能,你可以在文档中找到更多的细节。 – Kasramvd

+0

我会做的。再次感谢您的详细解答。 – Adam