Ich versuche, Bilder von PIL
in ein 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 mache ich beim Konvertieren von Bildern von PIL
in ein CV
Format einen Fehler?
Warum muss ich auch tippen, cv.cv
um auf Funktionen zuzugreifen?
Antworten:
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()
quelle
ex = numpy.array([ [ [1, 2, 3], [4, 5, 6] ], [ [7, 8, 9], [0, 1, 2] ] ])
. Soex[0]
ist die erste Zeile Ihres Bildes,ex[0][0]
ist die erste Spalte der ersten Zeile,ex[0][0][0]
ist die rote Komponente des ersten Pixels,ex[0][0][1]
ist die grüne Komponente undex[0][0][2]
ist die blaue Komponente. Da Sie anscheinend ein BGR-Bild benötigen (die umgekehrte Reihenfolge von RGB), invertieren Sie jedes Element, das ein Pixel wie in beschreibtex[0][0][::-1]
. Die letzte Zeile (mit Ausnahme der nutzlosen.copy
) entspricht dieser Operation für das gesamte Bild.cv2.cvtColor(open_cv_image, cv2.cv.CV_BGR2RGB)
etwas effizienter.TIF
), ist das numpy-Array so,bool
dass Sie es nicht mit OpenCV verwenden können. In diesem Fall müssen Sie es in OpenCV-Maske konvertieren:if image.dtype == bool: image = image.astype(np.uint8) * 255
Dies ist die kürzeste Version, die ich finden konnte. Sie 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)
quelle
import requests
response = requests.get(url)
opencvImage = imdecode(np.asarray(bytearray(response.content)), 1)
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor