2016-09-29 86 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