PIL.Image vs skimage.io: When to use each, and which (if one) is prefered over the other in general?

image-processing, package, python

Solution

In general it is safe to say that `Pillow` (install this rather than `PIL` as `Pillow` is maintained) is the one to go for if you are manipulating Image->Image as this is its main focus.

However, if you are reading an image for manipulation by other science kit based tools, such as machine learning, then go for skimage.io or better its replacement `imageio` thanks to @cris-luengo for pointing this our and you are likely to have to do less conversion back and forth.

The other consideration is the size:

Results of `pip download scikit-image` to a Windows 64 machine:

21/10/2022  06:20         3,363,278 imageio-2.22.2-py3-none-any.whl
21/10/2022  06:20         2,023,640 networkx-2.8.7-py3-none-any.whl
21/10/2022  06:20        14,643,698 numpy-1.23.4-cp310-cp310-win_amd64.whl
21/10/2022  06:20            40,750 packaging-21.3-py3-none-any.whl
21/10/2022  06:20         3,276,402 Pillow-9.2.0-cp310-cp310-win_amd64.whl
21/10/2022  06:20            98,338 pyparsing-3.0.9-py3-none-any.whl
21/10/2022  06:20         4,162,789 PyWavelets-1.4.1-cp310-cp310-win_amd64.whl
21/10/2022  06:20        12,044,719 scikit_image-0.19.3-cp310-cp310-win_amd64.whl
21/10/2022  06:20        40,141,232 scipy-1.9.3-cp310-cp310-win_amd64.whl
21/10/2022  06:20           210,312 tifffile-2022.10.10-py3-none-any.whl
              10 File(s)     80,005,158 bytes

Results of `pip download Pillow` to a Windows 64 machine:

21/10/2022  06:22         3,276,402 Pillow-9.2.0-cp310-cp310-win_amd64.whl

Note that the download of `scikit-image` includes `Pillow` as a dependency so you are going to be "using" Pillow whichever way you go but a lot depends on how accessible and in what form it is accessible.

If you are going for the `Scipy` route anyway you are likely to need all or most of that 80 MB but if you are not then Pillow at 3 MB is a much lighter space commitment.

Problem

I have been using Image for opening and getting pixel info, and have read things like "PIL is the future and blabla..", but I have seen that skimage is extensively used. Which one should I use for general image processing? I would feel more comfortable with this question answered..

Original source