Статья Автор: Деникина Наталья Владимировна

Нахождение объекта

Решим задачу нахождения объекта на достаточно большом поле.

Прежде чем начать обработку изображения, необходимо преобразовать его в градации серого.

img_gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)

Бинаризация изображения

После преобразования изображения в градации серого мы можем применить бинаризацию.

Бинаризация — это процесс преобразования градаций серого в черно-белое изображение.


Для этого можно использовать функцию np.where для округления значений до 0 или 255 в зависимости от порога:

img_bin = np.where(img_gray > 15, 255, 0).astype(np.uint8)

Этот код устанавливает все значения пикселей выше 15 на 255 (белый), а все значения ниже или равные 15 — на 0 (черный).

Также возможно применить команду:

img_bin = cv2.inRange(img_gray, 15, 255)

которая делает аналогичную операцию методами OpenCV.

Нахождение контуров

Для нахождения контуров на бинаризованном изображении используется функция cv2.findContours:

_, cont, h = cv2.findContours(img_bin, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

  • img_bin — входное бинаризованное изображение.
  • cv2.RETR_EXTERNAL — режим извлечения, который извлекает только внешние контуры.
  • cv2.CHAIN_APPROX_SIMPLE — метод аппроксимации контуров, который удаляет все избыточные точки и сжимает контур, сохраняя его основную структуру.

Функция возвращает три значения для OpenCV 3 версии:

  • _ — изображение с нарисованными контурами (не используется в нашей задаче)).
  • cont — список найденных контуров.
  • h — иерархия контуров (не используется в нашей задаче).

Примечание: для 4х версий OpenCV cv2.findContours возвращает два значения.
В проверяющей системе используется 4 версия OpenCV

cont, h = cv2.findContours(img_bin, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

  • cont — список найденных контуров.
  • h — иерархия контуров (не используется).

Нахождение прямоугольника, ограничивающего объект

Для нахождения ограничивающего прямоугольника вокруг первого (и в нашем случае, единственного) найденного контура используется функция cv2.boundingRect:

x, y, w, h = cv2.boundingRect(cont[0]) 
  • cont[0] — первый найденный контур.
  • x, y — координаты верхнего левого угла прямоугольника.
  • w, h — ширина и высота прямоугольника.

Вычисление координат центра объекта

Координаты центра объекта вычисляются как средние значения координат прямоугольника:

center_x = x + w // 2 
center_y = y + h // 2

Прикрепленные файлы
021.jpg
Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать