web-dev-qa-db-fra.com

Convertir une image du format PIL au format openCV

J'essaie de convertir une image du format PIL au format OpenCV. J'utilise OpenCV 2.4.3. voici ce que j'ai essayé jusqu'à maintenant.

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

Mais je pense que l'image n'est pas convertie au format CV. La fenêtre me montre une grande image marron. Où est-ce que je me trompe dans la conversion d'une image du format PIL en CV?

Aussi, pourquoi dois-je taper cv.cv pour accéder aux fonctions?

61
md1hunox

utilisez ceci:

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

C'est la version la plus courte que j'ai pu trouver, enregistrant/masquant une conversion supplémentaire:

pil_image = PIL.Image.open('image.jpg')
opencvImage = cv2.cvtColor(numpy.array(pil_image), cv2.COLOR_RGB2BGR)

Si vous lisez un fichier depuis une URL:

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
Berthier Lemieux