Пороговая обработка
Разбор задачи обработки изображений. N = H × W — число пикселей. Сложность включает чтение и запись изображения.
Как к ней подойти
Научитесь читать изображение как массив пикселей и проверять результат преобразования.
Изображение в OpenCV - массив пикселей, а порядок цветовых каналов при чтении обычно BGR. Операции могут менять размер, тип данных и число каналов; проверьте все три свойства перед сохранением результата.
Сначала вычисляется яркость, затем значения строго больше 127 заменяются на 255. Пиксель со значением ровно 127 должен стать нулём.
Проверьте перед запуском
- OpenCV читает цветные изображения в порядке BGR, а Pillow — RGB.
- Сохраните результат в output.png; печать массива в консоль не заменяет изображение.
- Проверка использует фиксированные тестовые картинки, а не загруженный вами пример.
Сравните свой подход
Ниже - готовое решение, другой способ, если он есть, и важные детали проверки.
Ваше принятое решение
Рекомендуемое решение: Обработка массива без циклов 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), включая копии массивов.