OpenCV Thresholding адаптируется к различным условиям освещения - PullRequest
2 голосов
/ 07 февраля 2020

Для школьного проекта я пытаюсь написать программу на Python, которая отслеживает движение ученика. Для этого я использую OpenCV. Посмотрев некоторые учебники по inte rnet, я заметил, что почти все используют пороговое значение для достижения этой цели, поскольку двоичное изображение необходимо почти для каждого шага в будущем (например, HoughCircle Transofrmation, Contours). Тем не менее, насколько я понимаю, порог очень чувствителен к свету, поэтому такой подход даст только хорошие результаты в оптимальных условиях освещения. Итак, вот мой вопрос: Есть ли какой-нибудь альтернативный или лучший подход, чем просто пороговое изображение? Или, во-первых, мое понимание порога в OpenCV неверно?

Вот пример изображения:

example image

1 Ответ

2 голосов
/ 07 февраля 2020

Целью порогового значения является сегментирование нужных объектов от фона, где вы можете затем выполнить дополнительную обработку (применение морфологических операций), а затем выполнить фильтрацию контуров для дальнейшей изоляции нужных объектов. Вместо применения методов обработки изображений к BGR (3-канальному) изображению или полутоновому (1-канальному) изображению с диапазоном [0...255], пороговое значение позволяет получить двоичное изображение, где каждый пиксель имеет значение 0 или 1. что облегчает различение объектов. В зависимости от вашей ситуации, есть много способов получить двоичное изображение, вот несколько методов:

  • cv2.Canny - Обнаружение Canny Edge, которое использует minVal и maxVal для определения ребер

  • cv2.threshold - Простое установление порога с выбранным пользователем произвольным глобальным пороговым значением

  • cv2.threshold + cv2.THRESH_OTSU - пороговое значение Оцу для автоматического расчета порогового значения.

  • cv2.adaptiveThreshold - Адаптивный порог, когда изображение имеет разные условия освещения в разных областях. По сути, он автоматически рассчитывает пороговое значение для разных областей изображения и дает лучшие результаты с изображениями с различной освещенностью

  • cv2.inRange - Сегментация цвета. Идея состоит в том, чтобы использовать нижний и верхний пороговые диапазоны для получения двоичного изображения. Полезно при попытке выделить один цветовой диапазон

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...