ImageMath
模块
这个 ImageMath
模块可用于计算“图像表达式”。该模块提供一个 eval()
函数,它获取表达式字符串和一个或多个图像。
示例:使用 ImageMath
模块
from PIL import Image, ImageMath
with Image.open("image1.jpg") as im1:
with Image.open("image2.jpg") as im2:
out = ImageMath.eval("convert(min(a, b), 'L')", a=im1, b=im2)
out.save("result.png")
表达式语法
表达式是标准的python表达式,但它们是在非标准环境中计算的。您可以像往常一样使用pil方法,加上以下一组运算符和函数:
标准操作员
您可以使用标准的算术运算符进行加法(+)、减法(-)、乘法(*)和除法(/)。
该模块还支持一元减号(-)、模(%)和幂(**)运算符。
请注意,根据需要,所有操作都是用32位整数或32位浮点值完成的。例如,如果添加两个8位图像,结果将是一个32位整数图像。如果将浮点常量添加到8位图像中,结果将是32位浮点图像。
您可以使用 convert()
, float()
和 int()
功能描述如下。
位运算符
该模块还提供对单个位进行操作的操作。这包括和(&)或()和独占或(^)。您还可以反转(~)所有像素位。
注意,在应用按位运算之前,操作数被转换为32位有符号整数。这意味着,如果反转普通灰度图像,将得到负值。您可以使用and(&)运算符屏蔽不需要的位。
位运算符不适用于浮点图像。
逻辑运算符
逻辑运算符 and
, or
和 not
处理整个图像,而不是单个像素。
空图像(所有像素为零)将被视为假。所有其他图像均视为真。
注意 and
和 or
返回上次计算的操作数,但不总是返回布尔值。
内置功能
这些功能应用于每个单独的像素。
- abs(image)
-
绝对值。
- convert(image, mode)
-
将图像转换为给定模式。模式必须作为字符串常量提供。
- float(image)
-
将图像转换为32位浮点。这相当于转换(图像,“f”)。
- int(image)
-
将图像转换为32位整数。这相当于转换(图像,“i”)。
请注意,如果需要获得正确的结果,1位和8位图像将自动转换为32位整数。
- max(image1, image2)
-
最大值。
- min(image1, image2)
-
最小值。
讨论区