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

МЕНЮ


Главная страница
Поиск
Регистрация на сайте
Помощь проекту
Архив новостей

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


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

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

Шаг 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() 

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

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

Заключение

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


Источник: habr.com

Комментарии: