Opencv find image in image python

Обнаружение и распознавание объектов в Python с помощью OpenCV

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

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

Обнаружение объекта

По сути, обнаружение объектов – это современная компьютерная технология, которая связана с обработкой изображений, глубоким обучением и компьютерным зрением для обнаружения объектов, присутствующих в файле изображения. Все технологии, используемые в методе обнаружения объектов (как мы упоминали ранее), связаны с обнаружением экземпляров объекта на изображении или видео.

С использованием OpenCV

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

Читайте также:  Html конструктор для чайников

В этом уроке мы будем использовать каскадную технику Хаара для обнаружения объектов. Давайте сначала узнаем вкратце о каскадной технике Хаара.

Каскад Хаара

По сути, каскадная техника Хаара – это подход, основанный на машинном обучении, при котором мы используем множество положительных и отрицательных изображений, чтобы научиться классифицировать изображения. Каскадные классификаторы Хаара считаются эффективным способом обнаружения объектов с помощью библиотеки OpenCV. Теперь давайте разберемся с концепцией положительных и отрицательных изображений, которую мы обсуждали ранее:

  • Положительные изображения: это изображения, которые содержат объекты, которые мы хотим идентифицировать с помощью классификатора.
  • Отрицательные изображения: это изображения, которые не содержат никаких объектов, которые мы хотим обнаружить классификатором, и это могут быть изображения всего остального.

Требования для обнаружения объектов с помощью Python OpenCV

Мы должны сначала установить некоторые важные библиотеки в нашу систему, поскольку это важное требование для выполнения задач обнаружения объектов. Мы должны установить следующие библиотеки в нашу систему в качестве требования для выполнения обнаружения объектов:

Прежде всего, требование для выполнения обнаружения объектов с использованием библиотеки OpenCV состоит в том, что библиотека OpenCV должна присутствовать на нашем устройстве, чтобы мы могли импортировать ее в программу Python и использовать ее функции обнаружения объектов. Если этой библиотеки нет в нашей системе, мы можем использовать следующую команду в нашем терминале командной строки для ее установки:

Установка библиотеки OpenCV

Когда мы нажимаем клавишу ввода после написания этой команды в терминале, установщик pip в командной строке начнет установку библиотеки OpenCV в нашу систему.

Отображение процесса установки библиотеки OpenCV

Как мы видим, библиотека OpenCV успешно установлена в нашей системе, и теперь мы можем импортировать ее в программу Python, чтобы использовать ее функции.

Matplotlib очень полезна при открытии, закрытии, чтении изображений в программе Python, и поэтому установка этой библиотеки для обнаружения объектов становится важным требованием. Если библиотека matplotlib отсутствует в нашей системе, мы должны использовать следующую команду в нашем терминале командной строки, чтобы установить ее:

Библиотека matplotlib

Когда мы нажимаем клавишу ввода после написания этой команды в терминале, установщик pip в командной строке начнет установку его в нашу систему.

Установка библиотеки matplotlib

Как мы видим, библиотека matplotlib успешно установлена в нашей системе, и теперь мы можем импортировать ее в программу Python, чтобы использовать ее функции для открытия, чтения и т. д. изображений.

Мы установили все необходимые библиотеки для выполнения обнаружения объектов, и теперь мы можем перейти к реализации части этой задачи.

Реализация в Python

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

Изображение для обнаружения объекта

Открытие изображения

Сначала мы откроем изображение, приведенное выше, и создадим среду изображения, чтобы показать его на выходе. Давайте сначала рассмотрим пример программы, чтобы понять ее реализацию, а затем рассмотрим пояснительную часть.

Пример 1: Открытие изображения с помощью OpenCV и библиотеки matplotlib в программе Python

# Import OpenCV module import cv2 # Import pyplot from matplotlib as pltd from matplotlib import pyplot as pltd # Opening the image from files imaging = cv2.imread("opencv-od.png") # Altering properties of image with cv2 img_gray = cv2.cvtColor(imaging, cv2.COLOR_BGR2GRAY) imaging_rgb = cv2.cvtColor(imaging, cv2.COLOR_BGR2RGB) # Plotting image with subplot() from plt pltd.subplot(1, 1, 1) # Displaying image in the output pltd.imshow(imaging_rgb) pltd.show()

Пример 1

Во-первых, мы импортировали библиотеки OpenCV(как cv2) и matplotlib(как plt) в программу, чтобы использовать их функции в коде. После этого мы открыли файл изображения с помощью функции imread() cv2.

Затем мы определили свойства изображения, которое мы открыли в программе, с помощью функций cv2. Затем мы строим подзаголовок изображения, используя функцию subplot() plt и задавая в ней параметры. Наконец, мы использовали функции imshow() и show() модуля plt, чтобы показать изображение на выходе.

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

Распознавание или обнаружение объекта на изображении

Теперь мы будем использовать функцию detectMultiScale() в программе для обнаружения объекта, присутствующего на изображении. Ниже приведен синтаксис использования в коде функции detectMultiScale():

found = xml_data.detectMultiScale(img_gray, minSize =(30, 30))

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

Пример 2: Обнаружение объекта на изображении с помощью метода detectMultiScale()

# Import OpenCV module import cv2 # Import pyplot from matplotlib as plt from matplotlib import pyplot as pltd # Opening the image from files imaging = cv2.imread("opencv-od.png") # Altering properties of image with cv2 imaging_gray = cv2.cvtColor(imaging, cv2.COLOR_BGR2GRAY) imaging_rgb = cv2.cvtColor(imaging, cv2.COLOR_BGR2RGB) # Importing Haar cascade classifier xml data xml_data = cv2.CascadeClassifier('XML-data.xml') # Detecting object in the image with Haar cascade classifier detecting = xml_data.detectMultiScale(imaging_gray, minSize =(30, 30)) # Amount of object detected amountDetecting = len(detecting) # Using if condition to highlight the object detected if amountDetecting != 0: for(a, b, width, height) in detecting: cv2.rectangle(imaging_rgb,(a, b), # Highlighting detected object with rectangle (a + height, b + width), (0, 275, 0), 9) # Plotting image with subplot() from plt pltd.subplot(1, 1, 1) # Displaying image in the output pltd.imshow(imaging_rgb) pltd.show()

Пример 2

После открытия изображения мы импортировали в программу XML-файл каскадного классификатора. Затем мы использовали функцию detectMultiScale() с импортированным каскадным файлом, чтобы определить, присутствует ли объект на изображении или нет.

Мы использовали условие if в программе, чтобы проверить, обнаружен ли объект или нет, и если объект обнаружен, мы выделили часть обнаруженного объекта, используя цикл for с функциями cv2. Выделив на изображении часть обнаруженного объекта, мы отобразили обработанное изображение с помощью функций plt show() и imshow().

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

Источник

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Find images within other images

johnoneil/subimage

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Simple tooling to detect an image in another image. Origially coded to locate, for example, reel symbols on screenshots of video slots. Or detect and identify poker cards on screenshots of poker play. Installation provides a small library of python functions and UNIX-like command line tools to find images within other images. Package has dependencies upon python packages numpy, scipy, opencv (cv2) and argparse. Have run it on windows, but is primarily developed and tested in linuxmint 16.

To install, point pip to this github:

pip install git+https://github.com/johnoneil/subimage 

Pip should manage dependencies nicely as of version 0.2. However the openCV package (cv2) is not properly pacckage managed. CV2 (opencv library bindings for python, version 2) Installation by hand is necessary, and that’s outside the cope of this doc. An example is here

Once installed, the package makes two command line tools available:

Tool finds images in other images. Invoked in the form:

subimage-find -v mega_fruits.jpg cherry.png -o subimage_test.png 

subimage find results image

Which will find all instances of cherry.png within the primary image mega fruits.jpg and write its output to subimage_test.png. There is an optional argument —confidence (value 0.0 to 1.0) which can be adjusted to fine tune search results. The command above generated the image below. Found instances of the cherry.png image within the larger image are outlined in RED.

Fid graphical elements (really connected components) within a primary image by their rectangular bounding box aspect ratio. Invoked in the form:

subimage-find-aspect-ratio poker.jpg --aspect 0.7 --error 0.02 -v 

subimage find ar results image

The above command generated output as below (cards in the image are of aspect ratio 0.7+/-0.03).Found instances of graphical element with the required aspect ratio are outlined in RED.

There’s a simple image recognition style test in the subimage/test director entitled ‘test01.py’. This script examines local (only) files to do simple recognition of poker cards. An example run follows:

(subimage_test)joneil@joneilDesktop ~/code/subimage/test $ ./test01.py Card found at 1021,113: diamond 6 Card found at 1048,119: heart ace Card found at 424,242: heart 2 Card found at 514,242: club 6 Card found at 604,242: spade 8 Card found at 694,242: diamond jack Card found at 784,242: spade king Card found at 1139,319: diamond 7 Card found at 1166,325: club 7 

This correctly identifies the cards in the above poker image example.

I put together this code just as a proof of concept. Besides checking if it runs on my current system once or twice a year I’m not really maintaining it. TBH, i’d really like to remove the OpenCV dependency, which should be possible, but haven’t done it yet.

About

Find images within other images

Источник

Оцените статью