2016-01-06 23 views
12

C'è un modo per utilizzare e tracciare con opencv2 con un notebook ipython?Notebook Ipython (jupyter), opencv (cv2) e tracciamento?

Sono abbastanza nuovo per l'analisi delle immagini Python. Ho deciso di andare con il flusso di lavoro del notebook per fare un bel disco mentre procedo e ha funzionato abbastanza bene usando matplotlib/pylab per tracciare le cose.

Un primo ostacolo che avevo era come tracciare le cose all'interno del notebook. Facile, basta usare la magia:

%matplotlib inline 

Più tardi, ho voluto eseguire manipolazioni con trame interattive, ma tracciando in una finestra dedicata sarebbe sempre congelare. Bene, ho imparato di nuovo che devi usare la magia. Invece di importare i moduli:

%pylab 

Ora mi sono trasferito a lavorare con opencv. Ora sono tornato allo stesso problema, dove o voglio tracciare in linea o utilizzare finestre interattive dedicate a seconda del compito da svolgere. C'è una magia simile da usare? C'è un altro modo per far funzionare le cose? O sono bloccato e devo semplicemente tornare a eseguire un programma da IDLE?

Come nota a margine: so che opencv ha installato correttamente. Innanzitutto perché non ho riscontrato errori nell'installare o importare il modulo cv2. In secondo luogo, perché posso leggere le immagini con cv2 e poi tracciarle con qualcos'altro.

+0

Ho scoperto che il "cv2.waitKey()" il comando dopo il "cv2.imshow()" il comando aggira il problema di congelamento per le finestre esterne - ma non so perché. Ho anche visto alcuni altri comandi menzionati qui: http://txt.arboreus.com/2012/07/11/highgui-opencv-window-from-ipython.html – Fire

+0

Non sono sicuro che tu possa incorporare cv2 namedWindow in Quaderno IPython in quanto è un frame C++. Probabilmente non c'è nessun back-end scritto per cv2.imshow. Userei imshow da pylab per l'incorporamento. Questo cv2.startWindowThread() funzionava per notebook? Io sono curioso. – otterb

+0

Non ha funzionato per me. Una finestra esterna vuota si apre e si blocca. – Fire

risposta

9

Questo è il mio modello vuoto:

import cv2 
import matplotlib.pyplot as plt 
import numpy as np 
import sys 
%matplotlib inline 

im = cv2.imread('IMG_FILENAME',0) 
h,w = im.shape[:2] 
print im.shape 
plt.imshow(im,cmap='gray') 
plt.show() 
+0

Eccellente! davvero bisogno di questo –

+0

Cosa può essere usato per? – Moondra

+0

hey che corrisponde alle dimensioni dell'immagine Altezza e Larghezza – themadmax

0

C'è anche quella piccola funzione che è stata usata nella Notebook Google Deepdream:

import cv2 
import numpy as np 
from IPython.display import clear_output, Image, display 
from cStringIO import StringIO 
import PIL.Image 

def showarray(a, fmt='jpeg'): 
    a = np.uint8(np.clip(a, 0, 255)) 
    f = StringIO() 
    PIL.Image.fromarray(a).save(f, fmt) 
    display(Image(data=f.getvalue())) 

allora si può fare:

img = cv2.imread("an_image.jpg") 

E semplicemente:

showarray(img) 

Ogni volta che è necessario per rendere l'immagine in una cella

Problemi correlati