6

I have imported wand using the following code

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

How can i convert img object to open cv (cv2) image object in python?

1 Answer 1

10

You would simply write to a byte-array buffer, and pass to cv2.imdecode.

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)
Sign up to request clarification or add additional context in comments.

2 Comments

Just a comment on how this works, IIUC make_blob() returns the image encoded in another format, apparently BMP, which OpenCV can then understand and decode. It would be nice to find a way to directly create the array. Apparently numpy.asarray(img) should work here, but it doesn't really do the correct thing, it creates an array of "wand.color.Color" objects...
I faced a problem with alpha channel, while handling a pdf. It is better to put img.alpha_channel = 'remove' after having set the background color.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.