¿Convertir el formato de imagen opencv al formato de imagen PIL?

Quiero convertir una imagen cargada

TestPicture = cv2.imread("flowers.jpg") 

Me gustaría ejecutar un filtro PIL ( http://pillow.readthedocs.io/en/4.0.x/reference/ImageFilter.html ) como en el ejemplo https://wellfire.co/learn/python-image-enhancements / con la variable

 TestPicture 

pero no puedo volver a convertirlo y cuarto entre estos tipos.

¿Hay alguna manera de hacer esta conversión?

¿Puede opencv hacer todos los filtros de imágenes que están en el paquete PIL?

Sí, OpenCV es más robusto y flexible y puede realizar la mayoría de las rutinas de procesamiento de imágenes que están disponibles, por lo que probablemente este filtro se puede hacer con OpenCV> Sin embargo, puede que no haya una API sencilla para eso.

De todos modos, en lo que respecta a la conversión del formato de imagen de OpenCV a PIL, puede usar Image.fromarray como:

 import cv2 import numpy as np from PIL import Image img = cv2.imread("path/to/img.png") # You may need to convert the color. img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) im_pil = Image.fromarray(img) # For reversing the operation: im_np = np.asarray(im_pil) 

Pero debe tener en cuenta que, OpenCV sigue la convención de BGR y la PIL sigue la convención de color RGB , por lo que para mantener las cosas consistentes, debe usar cv2.cvtColor() antes de la conversión.

Pillow y OpenCV utilizan diferentes formatos de imágenes. Así que no puedes leer una imagen en Pillow y usarla para manipular la imagen en OpenCV. Almohada usa el formato RGB como @ZdaR resaltado, y OpenCV usa el formato BGR . Entonces, para que necesite un convertidor para convertir de un formato a otro.

Para convertir de la imagen PIL a OpenCV use:

 import cv2 import numpy as np from PIL import Image pil_image=Image.open("demo2.jpg") # open image using PIL # use numpy to convert the pil_image into a numpy array numpy_image=numpy.array(pil_img) # convert to a openCV2 image, notice the COLOR_RGB2BGR which means that # the color is converted from RGB to BGR format opencv_image=cv2.cvtColor(numpy_image, cv2.COLOR_RGB2BGR) 

Para convertir la imagen de OpenCV imagen de PIL use:

 import cv2 import numpy as np from PIL import Image opencv_image=cv2.imread("demo2.jpg") # open image using openCV2 # convert from openCV2 to PIL. Notice the COLOR_BGR2RGB which means that # the color is converted from BGR to RGB pil_image=cv2.cvtColor(opencv_image, cv2.COLOR_BGR2RGB)