Question: How can you convert a PIL Image into a NumPy array for faster pixel-wise transformations without encountering issues during the conversion back to a PIL Image?
Answer:
The process involves two steps:
To convert a PIL Image to a NumPy array, you can use this code as an example:
pic = Image.open("foo.jpg") pix = numpy.array(pic.getdata()).reshape(pic.size[0], pic.size[1], 3)
Using pic.putdata():
If pic.putdata() is not behaving as expected when attempting to load the modified array back into the PIL Image, check that you are providing the data in a format that putdata() accepts. It expects a sequence of tuples, so you may need to convert the array to this format, as shown below:
data = list(tuple(pixel) for pixel in pix) pic.putdata(data)
Using PIL 1.1.6 :
As of PIL 1.1.6, you can use the following simplified approach for converting between images and NumPy arrays:
pix = numpy.array(pic)
This will result in a 3-dimensional array with rows, columns, and RGB values.
Final Steps:
After making modifications to the array, you can use either pic.putdata(pix) or Image.fromarray(pix) to create a new PIL Image.
The above is the detailed content of How to Efficiently Convert PIL Images to NumPy Arrays for Pixel Manipulation and Back?. For more information, please follow other related articles on the PHP Chinese website!