2016-05-03 9 views
3

Ich windet importiert habe mit dem folgenden CodeWie Stab Bildobjekt konvertieren cv Bild zu öffnen (numpy Array)

from wand.image import Image as WandImage 
from wand.color import Color 
with WandImage(filename=source_file, resolution=(RESOLUTION,RESOLUTION)) as img: 
    img.background_color = Color('white') 
    img.format  = 'tif' 
    img.alpha_channel = False 

Wie kann ich konvertieren img Objekt cv zu öffnen (cv2) Bildobjekt in Python ?

Antwort

5

Sie würden einfach in einen Byte-Array-Puffer schreiben und an cv2.imdecode übergeben.

from wand.image import Image as WandImage 
from wand.color import Color 
import numpy 
import cv2 

RESOLUTION=72 
source_file='rose:' 
img_buffer=None 

with WandImage(filename=source_file, resolution=(RESOLUTION,RESOLUTION)) as img: 
    img.background_color = Color('white') 
    img.format  = 'tif' 
    img.alpha_channel = False 
    # Fill image buffer with numpy array from blob 
    img_buffer=numpy.asarray(bytearray(img.make_blob()), dtype=numpy.uint8) 

if img_buffer is not None: 
    retval = cv2.imdecode(img_buffer, cv2.IMREAD_UNCHANGED) 
+0

funktionierte perfekt danke. –

+2

Nur ein Kommentar, wie das funktioniert, IIUC make_blob() gibt das Bild in einem anderen Format, offenbar BMP, zurück, die OpenCV dann verstehen und entschlüsseln kann. Es wäre schön, einen Weg zu finden, das Array direkt zu erstellen. Anscheinend sollte numpy.asarray (img) hier funktionieren, aber es tut nicht wirklich die richtige Sache, es erzeugt ein Array von "wand.color.Color" -Objekten ... – dividebyzero

+0

Ich habe ein Problem mit dem Alpha-Kanal, während der Handhabung eines pdf. Es ist besser, 'img.alpha_channel = 'remove' zu setzen, nachdem die Hintergrundfarbe eingestellt wurde. –