notebook leer imagen python opencv plot ipython

leer - ¿Ipython notebook(jupyter), opencv(cv2) y ploteado?



python opencv imread (3)

¿Hay alguna forma de usar y trazar con opencv2 con ipython notebook?

Soy bastante nuevo en el análisis de imágenes de Python. Decidí seguir con el flujo de trabajo de la notebook para hacer un buen registro mientras procesaba y ha funcionado bastante bien usando matplotlib / pylab para trazar cosas.

Un obstáculo inicial que tuve fue cómo trazar cosas dentro del cuaderno. Fácil, solo usa la magia:

%matplotlib inline

Más tarde, quise realizar manipulaciones con diagramas interactivos, pero el trazado en una ventana dedicada siempre se congelaría. Bien, aprendí de nuevo que necesitas usar magia. En lugar de simplemente importar los módulos:

%pylab

Ahora he pasado a trabajar con opencv. Ahora vuelvo al mismo problema, donde quiero trazar en línea o usar ventanas dedicadas e interactivas dependiendo de la tarea en cuestión. ¿Hay magia similar para usar? ¿Hay otra manera de hacer que las cosas funcionen? ¿O estoy atascado y necesito volver a ejecutar un programa desde IDLE?

Como nota al margen: sé que opencv se ha instalado correctamente. En primer lugar, porque no tengo errores al instalar o importar el módulo cv2. En segundo lugar, porque puedo leer en imágenes con cv2 y luego trazarlas con otra cosa.


Esta es mi plantilla vacía:

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

Ver muestra online


Para una notebook Jupyter que se ejecuta en Python 3.5 tuve que modificar esto para:

import io import cv2 import numpy as np from IPython.display import clear_output, Image, display import PIL.Image def showarray(a, fmt=''jpeg''): a = np.uint8(np.clip(a, 0, 255)) f = io.BytesIO() PIL.Image.fromarray(a).save(f, fmt) display(Image(data=f.getvalue()))


También existe esa pequeña función que se usó en Google Deepdream Notebook:

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

Entonces puedes hacer:

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

Y simplemente:

showarray(img)

Cada vez que necesites renderizar la imagen en una celda.