web-dev-qa-db-fra.com

Convertir le format d'image ouvert en format d'image PIL?

Je veux convertir une image chargée 

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

Je voudrais exécuter un filtre PIL ( http://pillow.readthedocs.io/en/4.0.x/reference/ImageFilter.html ) comme sur l'exemple https://wellfire.co/learn/python-image-enhancements/ avec la variable 

TestPicture

mais je suis incapable de le reconvertir et le quatrième entre ces types.

Y at-il un moyen de faire cette conversion?

Est-ce que l'opencv peut faire tous les filtres d'image qui sont dans le paquet PIL?

7
Arsenal Fanatic

Oui, OpenCV est plus robuste et flexible et peut exécuter la plupart des routines de traitement d'image disponibles. Ce filtre peut donc probablement être utilisé avec OpenCV> Cependant, il peut ne pas exister d'API simple. 

Quoi qu'il en soit, en ce qui concerne la conversion du format d'image OpenCV en PIL, vous pouvez utiliser Image.fromarray comme:

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)

Cependant, vous devez garder à l'esprit que, OpenCV suit la convention BGR et que PIL suit la convention de couleur RGB. Par conséquent, pour conserver la cohérence, il peut être nécessaire d'utiliser cv2.cvtColor() avant la conversion.

18
ZdaR

Pillow et OpenCV utilisent différents formats d'images. Vous ne pouvez donc pas simplement lire une image dans Pillow et l'utiliser pour la manipuler dans OpenCV . Pillow utilise le format RGB comme @ZdaR mis en surbrillance, et OpenCV utilise le format BGR. Vous avez donc besoin d’un convertisseur pour convertir d’un format à un autre.

Pour convertir une image PIL en OpenCV, utilisez:

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) 

Pour convertir une image OpenCV en une image PIL, utilisez:

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) 
3
alpha_989