python 函数式分割_Python PIL函数分割混合两个图像?

编辑:由于Mark和zephyr的帮助,代码现在可以工作了。zephyr还有两种替代的工作解决方案。

我想用PIL分割混合两个图像。我找到了ImageChops.multiply(image1, image2),但找不到类似的divide(image, image2)函数。

有没有一个内置的除法混合函数,我错过了(PIL或其他)?

我下面的测试代码正在运行,并且正在接近我想要的。生成的图像输出类似于这里的divide-blend示例图像:Divide Blend Mode Explained。

有没有一种更有效的方法来进行这种分割混合操作(步骤更少,速度更快)?起初,我尝试使用lambda函数在Image.eval和ImageMath.eval中检查黑色像素,并在除法过程中将其翻转为白色,但两种方法都无法产生正确的结果。

编辑:固定代码并由于Mark和zephyr而缩短。生成的图像输出与下面zephyr的numpy和scipy解决方案的输出相匹配。# PIL Divide Blend test

import Image, os, ImageMath

imgA = Image.open('01background.jpg')

imgA.load()

imgB = Image.open('02testgray.jpg')

imgB.load()

# split RGB images into 3 channels

rA, gA, bA = imgA.split()

rB, gB, bB = imgB.split()

# divide each channel (image1/image2)

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')

# merge channels into RGB image

imgOut = Image.merge("RGB", (rTmp, gTmp, bTmp))

imgOut.save('PILdiv0.png', 'PNG')

os.system('start PILdiv0.png')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值