How can i iterate over image pixels in a faster manner in python?

后端 未结 2 1300
误落风尘
误落风尘 2020-12-20 03:16

I want to modify a grayscale image in a manner so that I can change the pixel values to black for the top half of the image. I can certainly do this by iterating over in the

2条回答
  •  庸人自扰
    2020-12-20 03:46

    This will be much faster if you convert the PIL image to a numpy array first. Here's how you can zero all the pixels with a value below 10:

    >>> import numpy as np
    >>> arr = np.array(img)
    >>> arr[arr < 10] = 0
    >>> img.putdata(arr)
    

    Or, as you stated in your comment, here's you'd black out the top half of the image:

    >>> arr[:arr.shape[0] / 2,:] = 0
    

    Finally, since you're doing video processing, notice that you don't have to loop over the individual frames either. Let's say you have ten frames of 4x4 images:

    >>> arr = np.ones((10,4,4)) # 10 all-white frames
    >>> arr[:,:2,:] = 0         # black out the top half of every frame
    >>> a
    array([[[ 0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.],
        [ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.]],
    
       [[ 0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.],
        [ 1.,  1.,  1.,  1.],
        [ 1.,  1.,  1.,  1.]],
    ...
    

提交回复
热议问题