user1196549
user1196549

Reputation:

Python multiprocessing on OpenCV images

I need to accelerate some image processing by means of multithreading on a multicore architecture.

My images are OpenCV objects.

I tried approaching the problem with the threading module, but it turns out not to perform true parallelism (!) because of the GIL issue. I have tried with the multiprocessing module, but it turns out that my objects are not shared between processes (!)

My processing needs to work on different sections of the same image simultaneously (so that the Queue paradigm is irrelevant).

What can I do ?

Upvotes: 1

Views: 1386

Answers (1)

user1196549
user1196549

Reputation:

I eventually found a solution here to share NumPy arrays when using the multiprocessing model: http://briansimulator.org/sharing-numpy-arrays-between-processes/

The main idea is to flatten the image bitmap as a linear buffer, copy it to a shared array, and map it back to a bitmap (without copy) in the receiving processes.

This is not fully satisfying as multithreading would be more resource-friendly than multiprocessing (it takes a huge amount of memory), but at least it works, with minimal effort.

Upvotes: 1

Related Questions