Я думаю, это потому, что двоичное пороговое значение выводит пиксели, больше, чем Scalar 127, как белый, а оставшиеся - как черный.Это дает действительно плохие результаты в темноте (где большинство пикселей меньше 127) и на свету (где большинство пикселей имеют значение больше 127).
Что вы можете сделать, это найти среднее и стандартное отклонение.Затем вы можете определить маску таким образом, чтобы все пиксели выше
означали + k * std_deviation
как белые пиксели.Вы можете найти постоянную k, экспериментируя с различными изображениями.
Удачи!