Home > Backend Development > Python Tutorial > How to Efficiently Convert PIL Images to NumPy Arrays for Pixel Transformations?

How to Efficiently Convert PIL Images to NumPy Arrays for Pixel Transformations?

Mary-Kate Olsen
Release: 2024-11-12 13:24:02
Original
231 people have browsed it

How to Efficiently Convert PIL Images to NumPy Arrays for Pixel Transformations?

Converting PIL Images to NumPy Arrays for Efficient Pixel Transformations

When working with image processing tasks, it is often desirable to convert a PIL (Python Imaging Library) image into a NumPy array for faster pixel-wise transformations. This conversion enables efficient manipulation of image data, allowing for more complex and time-optimized image operations.

To convert a PIL image to a NumPy array, one can use the following code snippet:

pic = Image.open("foo.jpg")
pix = numpy.array(pic.getdata()).reshape(pic.size[0], pic.size[1], 3)
Copy after login

This code reads the image data from the PIL image and reshapes it into a 3-dimensional NumPy array, where each dimension represents the image's height, width, and channel (e.g., RGB).

To convert the NumPy array back into a PIL image after performing the desired transformations, the following code can be used:

new_pic = Image.fromarray(modified_pix)
Copy after login
Copy after login

However, this method does not allow for direct modification of the original PIL image using the modified NumPy array.

Prior to PIL version 1.1.6, modifying the original PIL image required converting the NumPy array to a list of tuples:

data = list(tuple(pixel) for pixel in modified_pix)
pic.putdata(data)
Copy after login

However, this approach can be slow and inefficient.

In PIL version 1.1.6 and above, the preferred method for converting between PIL images and NumPy arrays is:

pix = numpy.array(pic)
Copy after login

This command produces a 3-dimensional NumPy array with rows, columns, and RGB channels as its dimensions.

After performing the pixel transformations, the updated array can be converted back to a PIL image using:

new_pic = Image.fromarray(modified_pix)
Copy after login
Copy after login

Alternatively, one can modify the original PIL image using the modified NumPy array with:

pic.putdata(modified_pix)
Copy after login

The above is the detailed content of How to Efficiently Convert PIL Images to NumPy Arrays for Pixel Transformations?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template