2015-07-15 10 views
6

Come visualizzare l'immagine nel formato standard numpy/opencv/matplotlib in Kivy? Kivy usa un diverso layout di memoria immagine e non riesco a capire quale.Visualizza immagine numpy/opencv/matplotlib in Kivy

Il seguente codice funziona perfettamente. L'immagine è stata catturata usando cv2 VideoCapture. Credo immagine è BGR, dimensioni di matrice sono (360, 480, 3):

ret, image = video_capture.read() 
    cv2.imshow('image', image) 
    cv2.waitKey() 

Cercando di visualizzare con il seguente codice producono risultati disordinato:

video_texture = Texture.create(size=image.shape[:2]) 
    video_texture.blit_buffer(image.tostring(), colorfmt='rgb', bufferfmt='ubyte') 

    # ... 

    video_panel = self.ids['video_panel'] 
    with video_panel.canvas: 
     Rectangle(texture=video_texture, pos=video_panel.pos, size=video_panel.size) 

risposta

4

Trovato la trasformazione di destra. Probabilmente non ottimale:

ret, image = video_capture.read() 
    image = np.rot90(np.swapaxes(image, 0, 1)) 
    video_texture = Texture.create(size=(image.shape[1], image.shape[0]), colorfmt='rgb') 
    video_texture.blit_buffer(image.tostring(), colorfmt='bgr', bufferfmt='ubyte') 
3

Ho trovato che la rotazione può essere fatto utilizzando la funzione NumPy flipud(), non so se in realtà è più veloce (Io non sono quello sperimentato con python/NumPy), ma per alcuni questo potrebbe essere più logico leggere anziché la rotazione di 90 gradi e le swapax.