Пороговая обработка
Вы решили задачу. Теперь можно сравнить подходы.
Разбор задачи обработки изображений. N = H × W — число пикселей. Сложность включает чтение и запись изображения.
Авторский разбор для локальной версии на основе условия задачи. Это не выгрузка чужих посылок и не официальное решение исходного сайта.
Ваше принятое решение
Рекомендуемое решение: Обработка массива без циклов Python
Сначала вычисляется яркость, затем значения строго больше 127 заменяются на 255. Пиксель со значением ровно 127 должен стать нулём.
import cv2
import numpy as np
image = cv2.imread('input.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
_, result = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
cv2.imwrite('output.png', result)
Время: O(N) при фиксированных параметрах фильтра. Память: O(N), включая исходное и результирующее изображение.
Другой способ: Логическая маска NumPy
Сравнение gray > 127 создаёт булеву маску. np.where переводит её в значения 255 и 0; uint8 задаёт формат одноканального PNG.
import cv2
import numpy as np
image = cv2.imread('input.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
result = np.where(gray > 127, 255, 0).astype(np.uint8)
cv2.imwrite('output.png', result)
Время: O(N). Память: O(N), включая копии массивов.
На что обратить внимание
- OpenCV читает цветные изображения в порядке BGR, а Pillow — RGB.
- Сохраните результат в output.png; печать массива в консоль не заменяет изображение.
- Проверка использует фиксированные тестовые картинки, а не загруженный вами пример.
Рекомендация учитывает сложность и читаемость для этой задачи. Единственного самого быстрого решения для всех размеров входа и всех компьютеров может не быть.