web-dev-qa-db-de.com

Opencv-Bildformat in PIL-Bildformat konvertieren?

Ich möchte ein geladenes Bild konvertieren 

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

Ich möchte einen PIL-Filter ( http://pillow.readthedocs.io/de/4.0.x/reference/ImageFilter.html ) wie im Beispiel https://wellfire.co/learn ausführen/python-image-enhancements/ mit der Variable 

TestPicture

aber ich kann es nicht zwischen diesen Typen zurück und viert konvertieren.

Gibt es eine Möglichkeit, diese Konvertierung durchzuführen?

Kann opencv alle im PIL-Paket enthaltenen Bildfilter ausführen?

7
Arsenal Fanatic

Ja, OpenCV ist robuster und flexibler und kann die meisten Bildverarbeitungsroutinen ausführen, die draußen verfügbar sind. Wahrscheinlich kann dieser Filter mit OpenCV ausgeführt werden.> Allerdings gibt es möglicherweise keine direkte API dafür. 

Soweit es die Konvertierung des Bildformats von OpenCV in PIL betrifft, können Sie Image.fromarray wie folgt verwenden:

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)

Beachten Sie jedoch, dass OpenCV der BGR-Konvention und PIL der RGB-Farbkonvention folgt. Damit die Konstanten konsistent bleiben, müssen Sie cv2.cvtColor() vor der Konvertierung verwenden.

18
ZdaR

Pillow und OpenCV verwenden unterschiedliche Bildformate. Sie können also ein Bild nicht einfach in Pillow lesen und verwenden, um das Bild in OpenCV zu bearbeiten Pillow verwendet das Format RGB als @ZdaR hervorgehoben und OpenCV das Format BGR. Sie benötigen also einen Konverter, um von einem Format in ein anderes zu konvertieren.

Um von PIL image in OpenCV zu konvertieren, verwenden Sie:

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) 

Um von OpenCV image zu PIL image zu konvertieren, verwenden Sie:

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