Решим задачу нахождения объекта на достаточно большом поле.
Прежде чем начать обработку изображения, необходимо преобразовать его в градации серого.
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