Поиск объектов на изображении. Часть 1

Компьютерное зрение — удивительная область, которая позволяет компьютерам видеть и понимать мир через обработку изображений и видео. Одним из наиболее популярных инструментов для работы с компьютерным зрением является библиотека OpenCV. В этой статье мы рассмотрим, как использовать OpenCV для распознавания обьектов на изображении.

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

ea24a0324d20ed5ba325937eb03d39f6.jpg

Шаг 1: Установка и настройка OpenCV

Первым шагом будет установка и настройка OpenCV. Вы можете установить OpenCV с помощью pip, выполнив следующую команду:

pip install opencv-python

Шаг 2: Загрузка и предобработка изображения

Прежде чем начать распознавание карт, нам нужно загрузить изображение стола с картами. Мы используем функцию cv2.imread, чтобы загрузить изображение в переменную image:

image = cv2.imread('table_image.jpg')

Затем мы можем преобразовать изображение в оттенки серого и применить размытие для удаления шума:

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)

Шаг 3: Пороговая обработка

Для обнаружения контуров карт на изображении мы используем пороговую обработку. Пороговая обработка преобразует изображение в бинарное изображение, где каждый пиксель считается либо черным, либо белым. Мы можем использовать функцию cv2.threshold для этого:

thresholded = cv2.threshold(blurred, 100, 255, cv2.THRESH_BINARY)[1]

Шаг 4: Поиск контуров

Теперь мы можем использовать функцию cv2.findContours, чтобы найти контуры на изображении:

contours, _ = cv2.findContours(thresholded, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

Функция cv2.findContours возвращает список контуров на изображении.

Шаг 5: Обводка найденных карт на экране

Чтобы обвести найденные карты на экране, мы используем функцию cv2.drawContours. Например, чтобы обвести контуры зеленым цветом, мы можем использовать следующий код:

cv2.draw

Contours(image, contours, -1, (0, 255, 0), 2)

Этот код обведет все найденные контуры зеленым цветом толщиной 2 пикселя.

Шаг 6: Отображение изображения с обведенными картами

Наконец, мы можем отобразить изображение с обведенными картами на экране с помощью функции cv2.imshow:

cv2.imshow('Detected Cards', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Этот код откроет окно с изображением, на котором будут обведены найденные карты. Ожидание нажатия клавиши cv2.waitKey(0) позволяет пользователю просмотреть изображение до его закрытия.

Вот полный код

import cv2

# Загрузка изображения
image = cv2.imread('test_card.jpg')

# Предобработка изображения
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
thresholded = cv2.threshold(blurred, 100, 255, cv2.THRESH_BINARY)[1]

# Поиск контуров на изображении
contours, _ = cv2.findContours(thresholded, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# Отображение контуров на изображении
cv2.drawContours(image, contours, -1, (0, 255, 0), 2)

# Отображение изображения с контурами
cv2.imshow('Detected Cards', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Вот и наше изображение

062653ed6dc25220d0ea0d16ddf2f8c7.png

Как мы видим программа успешно справилась с с поиском карт н переднем и боковых планах, однако в центре все сработало не очень.

Заключение

В этой статье мы рассмотрели, как использовать библиотеку OpenCV для распознавания карт на столе и обводки их на экране. Мы рассмотрели шаги от загрузки и предобработки изображения до поиска контуров и обводки найденных карт. OpenCV предоставляет мощные инструменты для обработки изображений и компьютерного зрения, и вы можете использовать эти техники для создания различных проектов, связанных с распознаванием и обработкой изображений. Однако в целом все распозналось не очень, ничего страшного, в следующих статьях мы исправим это.

© Habrahabr.ru