Самый простой способ - одна строка:
im[im>250]-=10
Демонстрация
Начните с этого изображения градиента 8x8:
Здесь увеличено:
Затем используйте IPython , например:
# Load image as L (greyscale)
im = np.array(Image.open('image.png').convert('L'))
# View contents
im
Out[16]:
array([[255, 255, 255, 255, 255, 255, 255, 255],
[219, 219, 219, 219, 219, 219, 219, 219],
[182, 182, 182, 182, 182, 182, 182, 182],
[146, 146, 146, 146, 146, 146, 146, 146],
[109, 109, 109, 109, 109, 109, 109, 109],
[ 73, 73, 73, 73, 73, 73, 73, 73],
[ 36, 36, 36, 36, 36, 36, 36, 36],
[ 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)
# Do required processing
im[im>250]-=10
# Review contents
In [18]: im
Out[18]:
array([[245, 245, 245, 245, 245, 245, 245, 245],
[219, 219, 219, 219, 219, 219, 219, 219],
[182, 182, 182, 182, 182, 182, 182, 182],
[146, 146, 146, 146, 146, 146, 146, 146],
[109, 109, 109, 109, 109, 109, 109, 109],
[ 73, 73, 73, 73, 73, 73, 73, 73],
[ 36, 36, 36, 36, 36, 36, 36, 36],
[ 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)
Давайте попробуем уменьшить еще больше пикселей, просто для удовольствия:
In [19]: im[im>100]-=10
In [20]: im
Out[20]:
array([[235, 235, 235, 235, 235, 235, 235, 235],
[209, 209, 209, 209, 209, 209, 209, 209],
[172, 172, 172, 172, 172, 172, 172, 172],
[136, 136, 136, 136, 136, 136, 136, 136],
[ 99, 99, 99, 99, 99, 99, 99, 99],
[ 73, 73, 73, 73, 73, 73, 73, 73],
[ 36, 36, 36, 36, 36, 36, 36, 36],
[ 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)