EDIT: Code now works thanks to Mark and zephyr. zephyr also has two alternative working solutions below.
I want to share a combination of two images with PIL. I found ImageChops.multiply(image1, image2)but could not find a similar function divide(image, image2).
Split Blend Mode Explained (I used the first two images here as my test sources.)
Is there a built-in partition mixing function that I skipped (PIL or otherwise)?
My test code below works and comes close to what I'm looking for. The result of the image is similar to the image of the mixing example: Separate the mixing mode.
Is there a more efficient way to perform this split operation (fewer steps and faster)? At first I tried using the lambda functions in Image.evaland ImageMath.evalto check the black pixels and flip them to white during the division process, but I could not get the result for the correct result.
EDIT: fixed code and shortened thanks to Mark and zephyr. The resulting image result corresponds to the output from zephyr numpy and scipy below.
import Image, os, ImageMath
imgA = Image.open('01background.jpg')
imgA.load()
imgB = Image.open('02testgray.jpg')
imgB.load()
rA, gA, bA = imgA.split()
rB, gB, bB = imgB.split()
rTmp = ImageMath.eval("int(a/((float(b)+1)/256))", a=rA, b=rB).convert('L')
gTmp = ImageMath.eval("int(a/((float(b)+1)/256))", a=gA, b=gB).convert('L')
bTmp = ImageMath.eval("int(a/((float(b)+1)/256))", a=bA, b=bB).convert('L')
imgOut = Image.merge("RGB", (rTmp, gTmp, bTmp))
imgOut.save('PILdiv0.png', 'PNG')
os.system('start PILdiv0.png')