Я хотел, чтобы вы избегали петель for
и просто использовали Numpy.Итак, начиная с этого изображения:
from PIL import Image
import numpy as np
# Open image
im = Image.open('colorwheel.png')
# Make Numpy array
ni = np.array(im)
# Mask pixels where Blue > 200
blues = ni[:,:,2]>200
# Save logical mask as PNG
Image.fromarray((blues*255).astype(np.uint8)).save('result.png')
Если вы хотитесделайте замаскированные пиксели черными, используйте:
ni[blues] = 0
Image.fromarray(ni).save('result.png')
Вы можете сделать более сложные, составные тесты для диапазонов, таких как:
#!/usr/bin/env python3
from PIL import Image
import numpy as np
# Open image
im = Image.open('colorwheel.png')
# Make Numpy array
ni = np.array(im)
# Mask pixels where 100 < Blue < 200
blues = ( ni[:,:,2]>100 ) & (ni[:,:,2]<200)
# Save logical mask as PNG
Image.fromarray((blues*255).astype(np.uint8)).save('result.png')
Вы также можете создать условие для красных, зеленых и синих, а затем использовать Numpy's np.logical_and()
и np.logical_or()
для составных условий,например:
bluesHi = ni[:,:,2] > 200
redsLo = ni[:,:,0] < 50
mask = np.logical_and(bluesHi,redsLo)