Python Pillow - ImageChops.add_modulo() Function
The PIL.ImageChops.add_modulo function is used to add two images without clipping the result. Instead of clipping values that exceed the maximum (MAX) limit like the add() function, this add modulo operation wraps around, similar to modulo arithmetic.
The following formula gives the mathematical representation of this operation −
$$\mathrm{out\:=\:((image1\:+\:image2)\%\:MAX}$$
Unlike the ImageChops.add() function this operation is reversible, meaning that the original pixel values can be reconstructed from the result.
Syntax
Following is the syntax of the function −
PIL.ImageChops.add_modulo(image1, image2)
Parameters
Here are the details of this function parameters −
image1 − This is the first input image to add to another image.
image2 − This is the second input image to add to the first image.
Return Value
This Function returns the Image object.
Examples
Example 1
In this example, two random RGB images (image1 and image2) are created using NumPy arrays. Then the ImageChops.add_modulo() function is applied to see how the pixel values of the two images are represented in the output image after performing the modulo addition operation.
from PIL import Image, ImageChops
import numpy as np
# Create two random RGB images
image1 = Image.fromarray(np.array([(235, 64, 3), (255, 0, 0), (255, 255, 0), (255, 255, 255), (164, 0, 3)]), mode="RGB")
print("Pixel values of image1 at (0, 0):", image1.getpixel((0, 0)))
image2 = Image.fromarray(np.array([(255, 14, 3), (25, 222, 0), (255, 155, 0), (255, 55, 100), (180, 0, 78)]), mode="RGB")
print("Pixel values of image2 at (0, 0):", image2.getpixel((0, 0)))
# Add the two images without clipping the result
result = ImageChops.add_modulo(image1, image2)
print("Pixel values of the result at (0, 0) after add_modulo:", result.getpixel((0, 0)))
Output
Pixel values of image1 at (0, 0): (235, 0, 0) Pixel values of image2 at (0, 0): (255, 0, 0) Pixel values of the result at (0, 0) after add_modulo: (234, 0, 0)
Example 2
In this example, the ImageChops.add_modulo() function is used on two JPEG image files to add the images without clipping the result.
from PIL import Image, ImageChops
# Open two image files
image1 = Image.open('Images/TP logo.jpg')
image2 = Image.open('Images/pillow-logo-S.jpg')
# Add the two images without clipping the result
result = ImageChops.add_modulo(image1, image2)
# Display the input and resulting images
image1.show()
image2.show()
result.show()
Output
Input Image 1
Input Image 2
Output Image
Example 3
Here is an example that uses the ImageChops.add_modulo() function on two PNG image files to add the images without clipping the result.
from PIL import Image, ImageChops
# Open two image files
image1 = Image.open('Images/ColorDots.png')
image2 = Image.open('Images/pillow-w.png')
# Add the two images without clipping the result
result = ImageChops.add_modulo(image1, image2)
# Display the input and resulting images
image1.show()
image2.show()
result.show()
Output
Input Image 1
Input Image 2
Output Image