ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Трудно дать хороший ответ, потому что вы предоставили очень мало информации. Если вы разместите свое изображение до и после бинаризации, это будет намного проще. Однако я постараюсь дать несколько советов.
Если отверстия довольно большие, то, возможно, пороговое значение неверно, попробуйте увеличить или уменьшить его и проверьте результат. Вы можете попробовать
cv::threshold(gray_frame, gray_frame, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
Это автоматически рассчитает пороговое значение.
Если вы не можете найти хорошее значение порогового значения, попробуйте некоторые адаптивные алгоритмы порогового значения, opencv имеет функцию adaptiveThreshold (), но это не так хорошо.
Если отверстия и шум довольно маленькие (по несколько пикселей каждая), вы можете попробовать некоторые из следующих действий:
Использование открытия (эрозия, следующая дилатация) для удаления белого шума и закрытие (дилатация, следующая эрозия) до небольшого черного шума. Но помните, что открытие, удаляя белый шум, также усилит черный шум и наоборот.
Среднее размытие ПОСЛЕ того, как вы выполняете настройку порога. Он может удалить небольшой шум, как черный, так и белый, при этом сохраняя цвета (изображение будет по-прежнему двоичным) и, с возможными небольшими ошибками, формы. Применение медианного размытия ПЕРЕД бинаризацией также может помочь уменьшить небольшой шум.