2016-01-06 14 views
12

Czy istnieje sposób używania i drukowania za pomocą programu opencv2 z komputerem ipython?Notebook Ipython (jupyter), opencv (cv2) i kreślenie?

Jestem całkiem nowy w analizie obrazów Pythona. Postanowiłem pójść z przepływem pracy z notebookiem, aby stworzyć niezłą rekordy podczas przetwarzania i całkiem dobrze działało, używając matplotlib/pylab do kreślenia rzeczy.

Pierwszą przeszkodą, jaką miałem, było wykreślenie rzeczy w notatniku. Proste, wystarczy użyć magii:

%matplotlib inline 

Później chciałem wykonywać manipulacje z interaktywnymi działek ale kreślenia w dedykowanym oknie zawsze zamrażać. Dobrze, znowu się nauczyłem, że musisz używać magii. Zamiast tylko importować moduły:

%pylab 

Teraz przejdę do pracy z opencv. Powracam teraz do tego samego problemu, w którym albo chcę drukować inline, albo korzystać z dedykowanych, interaktywnych okien w zależności od wykonywanego zadania. Czy jest jakaś magia do użycia? Czy istnieje inny sposób na sprawne działanie? Czy utknąłem i muszę po prostu wrócić do uruchamiania programu z IDLE?

Uwaga: Wiem, że opencv zainstalował się poprawnie. Po pierwsze, ponieważ nie mam błędów ani instalowania ani importowania modułu cv2. Po drugie, ponieważ mogę czytać obrazy z CV2, a następnie narysować je za pomocą czegoś innego.

+0

I odkryli, że „cv2.waitKey()” polecenie po „cv2.imshow()” polecenie dostaje wokół kwestii zamrażania do okien zewnętrznych - ale nie wiem dlaczego. Widziałem również kilka innych poleceń wymienionych tutaj: http://txt.arboreus.com/2012/07/11/highgui-opencv-window-from-ipython.html – Fire

+0

Nie jestem pewien, czy można osadzić cv2 namedWindow w Notebook IPython, ponieważ jest to ramka C++. Prawdopodobnie nie ma backendu napisanego dla cv2.imshow. Używałbym imshow od pylab do osadzania. Czy to cv2.startWindowThread() działa dla notebooka? Jestem ciekaw. – otterb

+0

To nie działa dla mnie. Puste okno zewnętrzne wyskakuje i zawiesza się. – Fire

Odpowiedz

9

To mój pusty szablon:

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

Doskonale! naprawdę potrzebuję tego –

+0

Do czego można użyć h? – Moondra

+0

h i w odpowiadające rozmiarowi obrazu Wysokość i szerokość – themadmax

0

Istnieje również, że niewiele funkcja, która została wykorzystana do Notatnika 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())) 

Następnie można zrobić:

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

Po prostu:

showarray(img) 

każdym razem trzeba renderować obraz w komórce

Powiązane problemy