2012-03-28 16 views
10

Mit OpenCV 2 verwendet IPython nun NumPy Arrays standardmäßig.Konvertieren NumPy Array cvMat CV2

cvimage = cv2.imread("image.png") #using OpenCV 2 
type(cvimage) 
Out: numpy.ndarray #dtype is uint8 

pltimage = plt.imread("image.png") #using Matplotlib 
type(pltimage) 
Out: numpy.ndarray #dtype is float 

plt.imshow(cvimage) # works great 

cv2.imshow(cvimage) 
TypeError: Required argument 'mat' (pos 2) not found 

Da cv2 verwendet NumPy Arrays standardmäßig gibt es nicht mehr cv :: Mat Konstruktor und NumPy hat keine Funktionen zu einem cv::Mat Array zu konvertieren.

Irgendwelche Ideen?

+1

Ja, hat dies bereits beantwortet - Sie sind eigentlich nicht das zweite Argument fehlt, aber die erste. Ich kam jedoch mit einem anderen Problem hierher: nicht jedes "numpy.darray" vom Typ "uint8" kann angezeigt werden. Ich habe einen Slice gemacht, um einen einzelnen Kanal eines Bildes zu erhalten, wie 'red = frame [:,:, 0]', und bekam dann eine Ausnahme in 'imshow'. Ich vermute, es ist wegen der Sparsity. 'rot = frame [:,:, 0] .copy()' hat das behoben. –

Antwort

14

Die Funktion hat folgenden docstring: imshow(winname, mat) -> None. Sie können die Doc-Zeichenfolge anzeigen, indem Sie im Interpreter cv2.imshow.__doc__ eingeben.

Versuchen cv2.imshow('Image', cvimage).

+2

Wenn ich 'cvimage = cv2.imread ('image.png')' gefolgt von 'cv2.imshow ('Image', cvimage)' mache, werden keine Fehler zurückgegeben und das Bild wird angezeigt. – zarthur

+0

Ohne numpy zu importieren, geben sie den Typ 'numpy.darray' zurück. – zarthur

+1

fehlt Ihnen ein erforderliches Argument – Neon22

3

Mat Objekt wurde benötigt, weil C/C++ keine Standard/native Implementierung von Matrizen hatte.

Allerdings ist numpy 's array ein perfekter Ersatz für diese Funktionalität. Daher akzeptiert das Modul cv2numpy.array s, wo immer eine Matrix in den Dokumenten angegeben ist.

14

Die Frage, wie man einen technisch fragt NumPy Array (analog zu CV2 array) zur Umwandlung in ein Matte Objekt (CV).

mat_array = cv.fromarray(numpy_array) 

wo mat_array eine Matte-Objekt ist, und numpy_array ist ein NumPy Array oder ein Bild: Für jeden, der interessiert ist, kann dies durch durchgeführt werden. Ich würde vorschlagen, weg von älteren Lebenslaufstrukturen wo möglich zu bleiben. Numpy Arrays bieten viel bessere Leistung als implemenations in nativen Python

+9

ist für cv –

+0

nicht cv2 Wie sollen wir dies in C++ zu tun und für cv2? –

Verwandte Themen