How to convert a PIL Image into a numpy array?

后端 未结 8 2428
不知归路
不知归路 2020-11-22 17:12

Alright, I\'m toying around with converting a PIL image object back and forth to a numpy array so I can do some faster pixel by pixel transformations than PIL\'s Pixel

8条回答
  •  甜味超标
    2020-11-22 17:37

    You're not saying how exactly putdata() is not behaving. I'm assuming you're doing

    >>> pic.putdata(a)
    Traceback (most recent call last):
      File "...blablabla.../PIL/Image.py", line 1185, in putdata
        self.im.putdata(data, scale, offset)
    SystemError: new style getargs format but argument is not a tuple
    

    This is because putdata expects a sequence of tuples and you're giving it a numpy array. This

    >>> data = list(tuple(pixel) for pixel in pix)
    >>> pic.putdata(data)
    

    will work but it is very slow.

    As of PIL 1.1.6, the "proper" way to convert between images and numpy arrays is simply

    >>> pix = numpy.array(pic)
    

    although the resulting array is in a different format than yours (3-d array or rows/columns/rgb in this case).

    Then, after you make your changes to the array, you should be able to do either pic.putdata(pix) or create a new image with Image.fromarray(pix).

提交回复
热议问题