Я считаю, что numpy меняет порядок оси в PIL.На самом деле первый индекс это строки.Так что вместо этого вы должны перебирать w,h = im.shape
или h,w = image.size
.Может быть, вы можете проверить, что это правильно, сравнив image.size
и im.shape
?
Тем не менее, будет намного лучше, если вы не зацикливаетесь.Вы можете использовать маскирование и трансляцию для выполнения задачи цикла, например:
im[(im[...,0]<=150)&(im[...,0]>=50)] = 128 # will modify im in place
Это будет намного быстрее, особенно на таких больших изображениях.
Обратите внимание, что это проверяет только первый канал изображения между 150 и 50. Это то, что говорит ваш цикл for, так что я думаю, это то, что вы хотите.