2013-10-13 04:40:14 +04:00
|
|
|
|
.. py:module:: PIL.ImageMath
|
|
|
|
|
.. py:currentmodule:: PIL.ImageMath
|
|
|
|
|
|
2020-06-22 06:52:50 +03:00
|
|
|
|
:py:mod:`~PIL.ImageMath` Module
|
|
|
|
|
===============================
|
2013-10-13 04:40:14 +04:00
|
|
|
|
|
2024-03-25 12:38:52 +03:00
|
|
|
|
The :py:mod:`~PIL.ImageMath` module can be used to evaluate “image expressions”, that
|
|
|
|
|
can take a number of images and generate a result.
|
|
|
|
|
|
2024-03-25 21:50:08 +03:00
|
|
|
|
:py:mod:`~PIL.ImageMath` only supports single-layer images. To process multi-band
|
|
|
|
|
images, use the :py:meth:`~PIL.Image.Image.split` method or :py:func:`~PIL.Image.merge`
|
|
|
|
|
function.
|
2013-10-13 04:40:14 +04:00
|
|
|
|
|
|
|
|
|
Example: Using the :py:mod:`~PIL.ImageMath` module
|
|
|
|
|
--------------------------------------------------
|
|
|
|
|
|
2023-02-24 00:17:10 +03:00
|
|
|
|
::
|
2013-10-13 04:40:14 +04:00
|
|
|
|
|
2015-01-08 08:09:45 +03:00
|
|
|
|
from PIL import Image, ImageMath
|
2013-10-13 04:40:14 +04:00
|
|
|
|
|
2021-02-25 15:41:31 +03:00
|
|
|
|
with Image.open("image1.jpg") as im1:
|
|
|
|
|
with Image.open("image2.jpg") as im2:
|
2024-03-25 12:38:52 +03:00
|
|
|
|
out = ImageMath.lambda_eval(
|
|
|
|
|
lambda args: args["convert"](args["min"](args["a"], args["b"]), 'L'),
|
|
|
|
|
a=im1,
|
|
|
|
|
b=im2
|
|
|
|
|
)
|
|
|
|
|
out = ImageMath.unsafe_eval(
|
|
|
|
|
"convert(min(a, b), 'L')",
|
|
|
|
|
a=im1,
|
|
|
|
|
b=im2
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
.. py:function:: lambda_eval(expression, environment)
|
|
|
|
|
|
|
|
|
|
Returns the result of an image function.
|
|
|
|
|
|
|
|
|
|
:param expression: A function that receives a dictionary.
|
|
|
|
|
:param options: Values to add to the function's dictionary, mapping image
|
|
|
|
|
names to Image instances. You can use one or more keyword
|
|
|
|
|
arguments instead of a dictionary, as shown in the above
|
|
|
|
|
example. Note that the names must be valid Python
|
|
|
|
|
identifiers.
|
|
|
|
|
:return: An image, an integer value, a floating point value,
|
|
|
|
|
or a pixel tuple, depending on the expression.
|
2013-10-13 04:40:14 +04:00
|
|
|
|
|
2024-03-25 12:38:52 +03:00
|
|
|
|
.. py:function:: unsafe_eval(expression, environment)
|
2013-10-13 04:40:14 +04:00
|
|
|
|
|
2024-03-25 22:16:09 +03:00
|
|
|
|
Evaluates an image expression.
|
|
|
|
|
|
|
|
|
|
.. danger::
|
|
|
|
|
This uses Python's ``eval()`` function to process the expression string,
|
|
|
|
|
and carries the security risks of doing so. It is not
|
|
|
|
|
recommended to process expressions without considering this.
|
|
|
|
|
:py:meth:`lambda_eval` is a more secure alternative.
|
2013-10-13 04:40:14 +04:00
|
|
|
|
|
2024-03-25 21:50:08 +03:00
|
|
|
|
:py:mod:`~PIL.ImageMath` only supports single-layer images. To process multi-band
|
|
|
|
|
images, use the :py:meth:`~PIL.Image.Image.split` method or
|
|
|
|
|
:py:func:`~PIL.Image.merge` function.
|
2013-10-13 04:40:14 +04:00
|
|
|
|
|
|
|
|
|
:param expression: A string which uses the standard Python expression
|
|
|
|
|
syntax. In addition to the standard operators, you can
|
|
|
|
|
also use the functions described below.
|
2024-03-25 12:38:52 +03:00
|
|
|
|
:param options: Values to add to the function's dictionary, mapping image
|
|
|
|
|
names to Image instances. You can use one or more keyword
|
|
|
|
|
arguments instead of a dictionary, as shown in the above
|
|
|
|
|
example. Note that the names must be valid Python
|
|
|
|
|
identifiers.
|
2013-10-13 04:40:14 +04:00
|
|
|
|
:return: An image, an integer value, a floating point value,
|
|
|
|
|
or a pixel tuple, depending on the expression.
|
|
|
|
|
|
|
|
|
|
Expression syntax
|
|
|
|
|
-----------------
|
|
|
|
|
|
2024-03-25 22:16:09 +03:00
|
|
|
|
* :py:meth:`lambda_eval` expressions are functions that receive a dictionary
|
|
|
|
|
containing images and operators.
|
2024-03-25 12:38:52 +03:00
|
|
|
|
|
2024-03-25 22:16:09 +03:00
|
|
|
|
* :py:meth:`unsafe_eval` expressions are standard Python expressions,
|
|
|
|
|
but they’re evaluated in a non-standard environment.
|
2024-03-25 12:38:52 +03:00
|
|
|
|
|
2024-03-25 22:16:09 +03:00
|
|
|
|
.. danger::
|
|
|
|
|
:py:meth:`unsafe_eval` uses Python's ``eval()`` function to process the
|
|
|
|
|
expression string, and carries the security risks of doing so.
|
|
|
|
|
It is not recommended to process expressions without considering this.
|
|
|
|
|
:py:meth:`lambda_eval` is a more secure alternative.
|
2013-10-13 04:40:14 +04:00
|
|
|
|
|
|
|
|
|
Standard Operators
|
|
|
|
|
^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
|
|
You can use standard arithmetical operators for addition (+), subtraction (-),
|
|
|
|
|
multiplication (*), and division (/).
|
|
|
|
|
|
|
|
|
|
The module also supports unary minus (-), modulo (%), and power (**) operators.
|
|
|
|
|
|
|
|
|
|
Note that all operations are done with 32-bit integers or 32-bit floating
|
|
|
|
|
point values, as necessary. For example, if you add two 8-bit images, the
|
|
|
|
|
result will be a 32-bit integer image. If you add a floating point constant to
|
|
|
|
|
an 8-bit image, the result will be a 32-bit floating point image.
|
|
|
|
|
|
2020-07-14 15:23:57 +03:00
|
|
|
|
You can force conversion using the ``convert()``, ``float()``, and ``int()``
|
|
|
|
|
functions described below.
|
2013-10-13 04:40:14 +04:00
|
|
|
|
|
|
|
|
|
Bitwise Operators
|
|
|
|
|
^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
|
|
The module also provides operations that operate on individual bits. This
|
|
|
|
|
includes and (&), or (|), and exclusive or (^). You can also invert (~) all
|
|
|
|
|
pixel bits.
|
|
|
|
|
|
|
|
|
|
Note that the operands are converted to 32-bit signed integers before the
|
|
|
|
|
bitwise operation is applied. This means that you’ll get negative values if
|
2023-10-19 11:12:01 +03:00
|
|
|
|
you invert an ordinary grayscale image. You can use the and (&) operator to
|
2013-10-13 04:40:14 +04:00
|
|
|
|
mask off unwanted bits.
|
|
|
|
|
|
|
|
|
|
Bitwise operators don’t work on floating point images.
|
|
|
|
|
|
|
|
|
|
Logical Operators
|
|
|
|
|
^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
2016-04-19 17:29:59 +03:00
|
|
|
|
Logical operators like ``and``, ``or``, and ``not`` work
|
2013-10-13 04:40:14 +04:00
|
|
|
|
on entire images, rather than individual pixels.
|
|
|
|
|
|
|
|
|
|
An empty image (all pixels zero) is treated as false. All other images are
|
|
|
|
|
treated as true.
|
|
|
|
|
|
2016-04-19 17:29:59 +03:00
|
|
|
|
Note that ``and`` and ``or`` return the last evaluated operand,
|
2013-10-13 04:40:14 +04:00
|
|
|
|
while not always returns a boolean value.
|
|
|
|
|
|
|
|
|
|
Built-in Functions
|
|
|
|
|
^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
|
|
These functions are applied to each individual pixel.
|
|
|
|
|
|
|
|
|
|
.. py:currentmodule:: None
|
|
|
|
|
|
|
|
|
|
.. py:function:: abs(image)
|
2020-06-22 08:22:13 +03:00
|
|
|
|
:noindex:
|
2013-10-13 04:40:14 +04:00
|
|
|
|
|
|
|
|
|
Absolute value.
|
|
|
|
|
|
|
|
|
|
.. py:function:: convert(image, mode)
|
2020-06-22 08:22:13 +03:00
|
|
|
|
:noindex:
|
2013-10-13 04:40:14 +04:00
|
|
|
|
|
|
|
|
|
Convert image to the given mode. The mode must be given as a string
|
|
|
|
|
constant.
|
|
|
|
|
|
|
|
|
|
.. py:function:: float(image)
|
2020-06-22 08:22:13 +03:00
|
|
|
|
:noindex:
|
2013-10-13 04:40:14 +04:00
|
|
|
|
|
|
|
|
|
Convert image to 32-bit floating point. This is equivalent to
|
|
|
|
|
convert(image, “F”).
|
|
|
|
|
|
|
|
|
|
.. py:function:: int(image)
|
2020-06-22 08:22:13 +03:00
|
|
|
|
:noindex:
|
2013-10-13 04:40:14 +04:00
|
|
|
|
|
|
|
|
|
Convert image to 32-bit integer. This is equivalent to convert(image, “I”).
|
|
|
|
|
|
|
|
|
|
Note that 1-bit and 8-bit images are automatically converted to 32-bit
|
|
|
|
|
integers if necessary to get a correct result.
|
|
|
|
|
|
|
|
|
|
.. py:function:: max(image1, image2)
|
2020-06-22 08:22:13 +03:00
|
|
|
|
:noindex:
|
2013-10-13 04:40:14 +04:00
|
|
|
|
|
|
|
|
|
Maximum value.
|
|
|
|
|
|
|
|
|
|
.. py:function:: min(image1, image2)
|
2020-06-22 08:22:13 +03:00
|
|
|
|
:noindex:
|
2013-10-13 04:40:14 +04:00
|
|
|
|
|
|
|
|
|
Minimum value.
|