web-dev-qa-db-de.com

Konvertieren Sie das Bild von PIL in das openCV-Format

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?

61
md1hunox

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() 
106
Abhishek Thakur

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