2016-09-29 4 views
1

In OpenCV 3 die Funktion goodFeaturesToTrack eine Anordnung der folgenden Form zurückNumPy Array zur Liste Conversion

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

Nachdem das Array in eine Python-Liste Umwandlung ich

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

Obwohl dies eine Liste ist Wenn Sie sehen, dass es ein Paar Klammern mehr hat, als es sollte, und wenn ich versuche, über A [0] [1] auf ein Element zuzugreifen, erhalte ich einen Fehler. Warum haben das Array und die Liste dieses Formular? Wie soll ich es beheben?

Antwort

1

Weil Sie ein 3D-Array mit einem Element in der zweiten Achse:

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

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

Und wenn Sie das zweite Element durch A[0][1] zugreifen möchten wirft sie einen 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 

können Sie verwenden np.squeeze(), um die Dimension zu reduzieren und das Array in ein 2D-Array zu konvertieren:

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

Than k du! Genau das wollte ich. Eine Frage aus Neugier. Warum hat die Funktion trotzdem ein 3D-Array erstellt? – Adam

+0

@Adam Ich denke, das ist die Funktionalität von 'goodFeaturesToTrack', weitere Informationen finden Sie in der Dokumentation. – Kasramvd

+0

werde ich tun. Nochmals vielen Dank für die ausführliche Antwort. – Adam