2016-01-06 3 views
12

Gibt es eine Möglichkeit, mit opencv2 mit ipython notebook zu verwenden und plotten?Ipython Notebook (Jupiter), opencv (cv2) und Plotten?

Ich bin ziemlich neu in Python-Bildanalyse. Ich entschied mich dafür, mit dem Workflows des Notebooks zu arbeiten, um eine gute Aufzeichnung zu erstellen, und ich habe es mit Matplotlib/Pylab sehr gut ausgearbeitet, um Dinge zu zeichnen.

Eine anfängliche Hürde, die ich hatte, war, wie man Sachen innerhalb des Notizbuches plant. Einfach, einfach Magie:

%matplotlib inline 

Später wollte ich Manipulationen mit interaktiven Plots durchzuführen, sondern in einem eigenen Fenster Plotten würde immer einzufrieren. Gut, ich habe wieder gelernt, dass du Magie benutzen musst. Anstatt nur die Module zu importieren:

%pylab 

Jetzt bin ich auf die Arbeit mit opencv gezogen. Ich bin jetzt wieder bei dem gleichen Problem, bei dem ich entweder inline plotten möchte oder dedizierte, interaktive Fenster benutze, abhängig von der jeweiligen Aufgabe. Gibt es eine ähnliche Magie? Gibt es eine andere Möglichkeit, Dinge zum Laufen zu bringen? Oder stecke ich fest und muss einfach wieder ein Programm von IDLE ausführen?

Als eine Randnotiz: Ich weiß, dass opencv korrekt installiert wurde. Erstens, weil ich keine Fehler habe, entweder das cv2-Modul zu installieren oder zu importieren. Zweitens, weil ich Bilder mit cv2 einlesen und dann mit etwas anderem plotten kann.

+0

Ich habe festgestellt zu machen, dass der Befehl „cv2.waitKey()“ nach dem „cv2.imshow()“ Befehl für externe Fenster des Einfrieren Problem wird um - Aber ich weiß nicht warum. Ich habe auch einige andere Befehle gesehen, die hier erwähnt werden: http://txt.arboreus.com/2012/07/11/highgui-opencv-window-from-ipython.html – Fire

+0

Ich bin nicht sicher, ob Sie cv2 namedWindow in einbetten können IPython-Notebook, da es ein C++ - Frame ist. Wahrscheinlich wurde kein Backend für cv2.imshow geschrieben. Ich würde imshow von pylab zum Einbetten verwenden. Hat dieses cv2.startWindowThread() für Notebook funktioniert? Ich bin neugierig. – otterb

+0

Es hat nicht für mich funktioniert. Ein leeres externes Fenster erscheint und friert ein. – Fire

Antwort

9

Das ist meine leere Vorlage:

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

Ausgezeichnet! brauche das wirklich –

+0

Wofür kann h, w benutzt werden? – Moondra

+0

h und w entspricht der Bildgröße für Höhe und Breite – themadmax

0

Es gibt auch die kleine Funktion, die in den Google Deepdream Notebook verwendet wurde:

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())) 

Dann können Sie tun:

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

Und einfach:

showarray(img) 

Jedes Mal, wenn Sie brauchen das Bild in einer Zelle