Как насчет изменения
black_pixels_mask = np.all(image == [0, 0, 0], axis=-1);
на
black_pixels_mask = np.all(image == [0, 0, 0], axis=2)
Проблема в том, что в версиях matplotlib < 2.2.0 не было нормализации и каких-либо предупреждений, когда вы передавали массив в imshow
, который содержал данные вне ожидаемого диапазона. Итак, вы можете получить некоторые неожиданные результаты, например, здесь: Поведение Bizzare matplotlib при отображении изображений, отлитых как плавающие
Если вы обновите свой matplotlib до версии> = 2.2.0, при запуске кода в этом вопросе вы увидите следующее предупреждение:
Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).
и полученное изображение будет тем, которое вы хотели бы получить. Итак, мой совет для вас - заменить
image_copy[black_pixels_mask] = [255, 255, 255]
на
image_copy[black_pixels_mask] = [1, 1, 1]
, и было бы также желательно обновить matplotlib.
Вот связанная проблема на GitHub: imshow
не нормализует диапазон цветов в изображениях RGB , а также запрос на извлечение: Обрезать данные RGB до допустимого диапазона для imshow
[119 ].