PIL:当我使用大于1.0的alpha时,Image.Blend()中发生了什么?

时间:2016-12-30 23:31:30

标签: python image-processing python-imaging-library pillow

来自文档:

  

通过使用常量alpha在给定图像之间进行插值来创建新图像。两个图像必须具有相同的大小和模式。 out = image1 *(1.0 - alpha)+ image2 * alpha   如果alpha为0.0,则返回第一个图像的副本。如果alpha为1.0,则返回第二个图像的副本。 alpha值没有限制。如有必要,剪切结果以适应允许的输出范围。

所以对alpha没有限制,但是当你使用大于1.0的值时会发生什么?

图片1: enter image description here

图片2: enter image description here

图像与100.0的alpha混合: enter image description here

1 个答案:

答案 0 :(得分:-1)

您引用的公式充分说明了结果。如果alpha100,则会获得image1 * -99 + image2 * 100,然后每个像素的结果将被限制为有效。让我们看一下这个例子的含义。

我从小丑前额采样的像素具有RGB值(255, 194, 106)。来自另一图像(海景蓝天的一部分)的近似对应像素具有RGB值(1, 109, 217)。根据上面的等式组合它们,给出(25401, 8609, -10883),这显然超出了所有三个波段的界限。将每种颜色夹在0255之间会产生(255, 255, 0),这是您在该区域的输出图像中看到的纯黄色。

输出图像中的几乎所有像素对于每个色带都将具有0255的值(导致非常饱和的颜色)。只有极少数像素(对于这些图像可能没有像素,我没有检查过),两幅图像之间的差异非常小,会有任何中间值。