Комментарии 7
Для перекладывания пикселей лучше использовать numpy. Можно будет писать код
img[1: -1, :] = np.max(img[0: -2, :], img[1: -1, :], img[2: 0, :])
и работать с целыми областями изображений. Под капотом вызовется код на си и тормозить не будет.
Было интересно, но какова финальная цель (ха-ха, кто бы говорил)? Не проще выполнить свёртку силами того же pillow с каким-нибудь дифференциальным оператором, например Лапласа или Собеля?
src = Image.open(r"/path/to/image")
src = src.convert("L")
dst = src.filter(ImageFilter.Kernel((3, 3), (0, 1, 0, 1, -4, 1, 0, 1, 0), 1, 1))
Вообще говоря, если в Питоне вам приходится писать цикл по элементам массива (в особенности если это пиксели изображения) или по DataFrame - то с вероятностью 99% вы делаете что-то радикально неверно. И ваш код - яркий тому пример.
А OpenCV - не вариант?
Очевидно, что в условиях лабораторки было не использовать библиотеки. Без сарказма.
Поставил плюсик автору авансом для мотивации в развитии.
Обработка изображений на Python