Вы можете использовать условные числа:
Например, заменить четные числа в матрице 5x5 на 42:
import numpy as np
a = np.arange(5*5).reshape((5,5))
print(a)
Out:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
a[a%2==0] = 42
print(a)
Это дает:
array([[42, 1, 42, 3, 42],
[ 5, 42, 7, 42, 9],
[42, 11, 42, 13, 42],
[15, 42, 17, 42, 19],
[42, 21, 42, 23, 42]])
Для вашего изображения вам нужно немного больше манипуляций.это будет что-то вроде:
myImg = np.arange(1000*1000*3).reshape((1000,1000,3)) # replace with your image
colorVecs = np.reshape(myImg,(-1,3)) #so that each array element is a 1x3 vector
colorVecs[colorVecs == [255,255,255]] = [0,255,0] #perform your operation
filteredImg = np.reshape(colorVecs,(1000,1000,3)) #back to a normal image
Больше информации о булевых масках здесь