您的位置:首页 > 编程语言 > Python开发

Python Imaging Library: ImageMath Module(图像数学运算模块)

2017-10-30 19:26 886 查看
Python Imaging Library: ImageMath Module(图像数学运算模块)

(新版本1.1.6)可以使用ImageMath模块来评估“图像表达式”。这个模块提供了一个eval函数,它使用一个表达式字符串和一个或多个图像。


例程

import Image, ImageMath

im1 = Image.open("image1.jpg")

im2 = Image.open("image2.jpg")

out = ImageMath.eval("convert(min(a, b), 'L')", a=im1, b=im2)

out.save("result.png")


函数


eval


eval(expression, environment) ⇒ image or value

在给定的环境中对表达式求值。

表达式参数是使用标准Python表达式语法的字符串。除了标准操作符之外,您还可以使用下面描述的函数。

环境参数将图像名称映射到图像实例。您可以使用一个或多个关键字参数而不是字典,如上述示例所示。

注意,名称必须是有效的Python标识符。

在当前版本中,ImageMath只支持单层图像。要处理多波段图像,先使用分割和合并函数。

这个函数返回一个图像,一个整数值,一个浮点值,或者一个像素元组,这取决于表达式。


表达式语法(Expression Syntax)

表达式是标准的Python表达式,但是它们是在一个非标准的环境中进行评估的。

您可以像往常一样使用方法,加上下面的操作符和函数:


标准运算符(Standard Operators)

您可以使用标准的算术运算符,如加(+)、减(-)、乘()和除(/)。

该模块还支持一元负号(-)、模数(%)和幂(**)操作符。

注意,所有操作都是在32位整数或32位浮点值的情况下完成的。

例如,如果您添加两个8位图像,结果将是一个32位整型图像。

如果您将浮点数添加到一个8位图像,结果将是一个32位的浮点图像。

您可以使用下面描述的转换、浮动和int函数来强制转换。


按位运算符(Bitwise Operators)

该模块还提供单个位操作运算符。这包括和(&)、或(|)、亦或(^)、取反(^)。

注意,在应用位操作之前,操作数被转换为32位有符号整数。

这意味着,如果你取反一个普通灰度图像,你会得到负值。

你可以使用和(&)操作符来屏蔽不想要位。

位操作不适用于浮点数图像。


逻辑运算符(Logical Operators)

逻辑运算符,如和(and)、或(or)、非(not),对整个图像进行处理,而不是单个像素。

一个空的图像(所有像素值为0)被认为是错误的。所有其他图像都被认为是正确的。

注意,和(and)、或(or)运算符返回最后一个求值的操作数,而非(not)总是返回一个布尔值。


内置函数(Built-in Functions)

这些函数适用于每个像素。

abs(image):绝对值。

convert(image, mode):将图像转换为指定模式。模式必须以字符串常量的形式给出。

float(image):将图像转换为32位浮点数图像。这等价于:convert(image, “F”)

int(image):将图像转换为32位整数图像。这相当于:convert(image, “I”)

注意,如果有必要,1位和8位图像会自动转换为32位整数图像,以得到正确的结果。

max(image1, image2):最大值。

min(image1, image2):最小值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Python PIL ImageMath