Ich versuche, ein Bild vom PIL
in das OpenCV
Format zu konvertieren. Ich benutze OpenCV 2.4.3
. hier ist, was ich bis jetzt versucht habe.
>>> from PIL import Image
>>> import cv2 as cv
>>> pimg = Image.open('D:\\traffic.jpg') #PIL Image
>>> cimg = cv.cv.CreateImageHeader(pimg.size,cv.IPL_DEPTH_8U,3) #CV Image
>>> cv.cv.SetData(cimg,pimg.tostring())
>>> cv.cv.NamedWindow('cimg')
>>> cv.cv.ShowImage('cimg',cimg)
>>> cv.cv.WaitKey()
Aber ich denke, das Bild wird nicht in das CV-Format konvertiert. Das Fenster zeigt mir ein großes braunes Bild. Wo gehe ich beim Konvertieren von Bildern vom Format PIL
in das Format CV
falsch vor?
Warum muss ich auch cv.cv
, um auf Funktionen zuzugreifen?
benutze das:
pil_image = PIL.Image.open('Image.jpg').convert('RGB')
open_cv_image = numpy.array(pil_image)
# Convert RGB to BGR
open_cv_image = open_cv_image[:, :, ::-1].copy()
Dies ist die kürzeste Version, die ich finden konnte und speichert/versteckt eine zusätzliche Konvertierung:
pil_image = PIL.Image.open('image.jpg')
opencvImage = cv2.cvtColor(numpy.array(pil_image), cv2.COLOR_RGB2BGR)
Wenn Sie eine Datei von einer URL lesen:
import cStringIO
import urllib
file = cStringIO.StringIO(urllib.urlopen(r'http://stackoverflow.com/a_Nice_image.jpg').read())
pil_image = PIL.Image.open(file)
opencvImage = cv2.cvtColor(numpy.array(pil_image), cv2.COLOR_RGB2BGR)