Спонсор: Intel
Опубликован: 20.08.2013 | Уровень: для всех | Доступ: платный | ВУЗ: Новосибирский Государственный Университет
Самостоятельная работа 1:

Сборка и установка библиотеки OpenCV. Использование библиотеки в среде Microsoft Visual Studio

< Лекция 5 || Самостоятельная работа 1: 12345678910 || Самостоятельная работа 2 >
Аннотация: В работе предлагается описание возможных способов сборки и установки библиотеки OpenCV. Приводится последовательность действий, которые необходимо выполнить для настройки среды Microsoft Visual Studio при разработке приложений с использованием функций библиотеки. Далее рассматриваются некоторые элементарные операции обработки изображений, решается задача выделения контуров объекта и разрабатывается приложение с целью освоения этих элементарных операций. Описываются некоторые операции работы с видеоданными, рассматривается задача видеодетектирования лиц с использованием классификатора Хаара. Разрабатывается приложение, которое демонстрирует применение некоторых функций работы с видео, а также реализации указанного детектора, входящей в состав библиотеки OpenCV.

Презентацию к лекции Вы можете скачать здесь.

Дополнительные материалы Вы можете скачать здесь.

Введение

Все видимое может быть также неувиденным, однако остается все же обнаруживаемым.

Эдмунд Гуссерль

В настоящее время при решении многих практических задач используются системы компьютерного зрения (системы видеонаблюдения, управления процессами, организации информации и др.). OpenCV (Open Source Computer Vision Library) [1, 2] является одной из наиболее популярных библиотек компьютерного зрения с открытыми исходными кодами, в состав которой входит большое количество функций обработки изображений и видео в реальном времени. Библиотека реализована на языках C/C++, имеются обертки для вызова функций из языка Python, также существует кроссплатформенные .NET-обертки в составе EmguCV [3], позволяющие работать с OpenCV из C#, VB, VC++, IronPython и других языков платформы .NET. Нельзя не отметить, что в настоящее время активно развивается Java-интерфейс в связи с портированием библиотеки на мобильные платформы. Разработчики обеспечивают стабильную работу на базе операционных систем семейства Windows, Linux, MacOS, Android и iOS. Характерной особенностью OpenCV является модульность архитектуры, которая предполагает наличие нескольких статических или динамических библиотек. На данный момент доступно около двух десятков модулей, в частности, наиболее используемыми являются:

  1. core – модуль, содержащий объявление всех структур данных, включая базовую структуру для представления многомерного массива Mat и функции работы с ней.
  2. imgproc – модуль обработки изображений, который включает в себя линейную и нелинейную фильтрацию, геометрические преобразования изображений (в частности, масштабирование), преобразования цветовых пространств и т.д.
  3. highgui – модуль, позволяющий отображать рабочие изображения, проигрывать видео и создавать простые интерфейсы управления.
  4. ml – модуль, содержащий реализацию некоторых алгоритмов машинного обучения.
  5. objdetect – модуль детектирования объектов (в частности, содержит реализацию детектора Виолы-Джонса или классификатора Хаара [18] и алгоритма детектирования объектов 20 разных классов (машина, человек, автобус и др.) Latent SVM [19]).
  6. gpu – gpu-реализации некоторых алгоритмов, которые реализованы на центральном процессоре в других модулях.
  7. video – модуль анализа видео, включающий функции оценивания движения на видео, вычитания фона и слежения за объектами на последовательности кадров видеопотока.
  8. features2d – модуль выделения и сопоставления особых точек на изображениях.

В настоящей работе предполагается продемонстрировать использование некоторых базовых функций. Также подробно описать этап предварительной подготовки программной инфраструктуры с целью последующего использования библиотеки OpenCV на базе операционной системы Windows в среде Microsoft Visual Studio.

1. Методические указания

1.1. Цели и задачи работы

Цель данной работы – рассмотреть технические этапы подготовки инфраструктуры и продемонстрировать использование базовых функций библиотеки OpenCV на простых практических примерах.

Данная цель предполагает решение следующих задач:

  1. Сборка и установка библиотеки OpenCV [1, 2] с использованием инсталлятора и из исходных кодов.
  2. Настройка среды Microsoft Visual Studio с целью использования библиотеки при разработке C/C++ приложений.
  3. Разработка приложения для определения контуров объектов, демонстрирующего применение некоторых базовых операций обработки изображений [20, 22]: загрузка и сохранение изображений, конвертирование цветового пространства, бинаризация изображения, выделение контуров объекта.
  4. Разработка приложения для демонстрации базовых операций обработки видео на примере задачи детектирования лиц с помощью классификатора Хаара [18].

1.2. Структура работы

В работе предлагается описание возможных способов сборки и установки библиотеки OpenCV. Приводится последовательность действий, которые необходимо выполнить для настройки среды Microsoft Visual Studio при разработке приложений с использованием функций библиотеки. Далее рассматриваются некоторые элементарные операции обработки изображений, решается задача выделения контуров объекта и разрабатывается приложение с целью освоения этих элементарных операций. Описываются некоторые операции работы с видеоданными, рассматривается задача видеодетектирования лиц с использованием классификатора Хаара. Разрабатывается приложение, которое демонстрирует применение некоторых функций работы с видео, а также реализации указанного детектора, входящей в состав библиотеки OpenCV.

1.3. Тестовая инфраструктура

Вычислительные эксперименты проводились с использованием следующей инфраструктуры (табл. 6.1).

Таблица 6.1. Тестовая инфраструктура
Операционная система Microsoft Windows 7
Среда разработки Microsoft Visual Studio 2010
Библиотека TBB Intel® Threading Building Blocks 3.0 for Windows, Update 3 (в составе Intel® ParallelStudio XE 2011 SP1)
Библиотеки OpenCV Версия 2.4.2

1.4. Рекомендации по проведению занятий

При выполнении данной лабораторной работы рекомендуется следующая последовательность действий:

  1. Напомнить вводную информацию о том, что такое компьютерное зрение, и какие основные задачи решаются средствами компьютерного зрения.
  2. Выполнить обзор основных модулей библиотеки OpenCV, рассмотреть назначение и возможности каждого модуля.
  3. Рассмотреть и продемонстрировать основные способы установки библиотеки OpenCV на системы с ОС семейства Windows.
  4. Продемонстрировать последовательность действий, которые необходимо выполнить для создания и настройки консольного C/C++ проекта в среде Microsoft Visual Studio, чтобы подключить возможность использования библиотеки OpenCV.
  5. Рассмотреть постановку и алгоритм решения задачи выделения контуров объекта на статическом изображении.
  6. Рассмотреть базовые функции обработки изображений библиотеки OpenCV и разработать приложение для выделения контуров объекта на статическом изображении.
  7. Рассмотреть постановку задачи детектирования лиц на видео, привести схему решения данной задачи посредством классификатора Хаара.
  8. Объяснить базовые функции работы с видеопотоком, входящие в состав OpenCV, и разработать приложение, которое позволяет детектировать лица на видео с использованием классификатора Хаара, реализованного в OpenCV. Предполагается, что видео может быть получено из файла или с веб-камеры.
< Лекция 5 || Самостоятельная работа 1: 12345678910 || Самостоятельная работа 2 >
Александра Максимова
Александра Максимова

При прохождении теста 1 в нем оказались вопросы, который во-первых в 1 лекции не рассматривались, во-вторых, оказалось, что вопрос был рассмаотрен в самостоятельно работе №2. Это значит, что их нужно выполнить перед прохождением теста? или это ошибка?
 

Алена Борисова
Алена Борисова

В лекции по обработке полутоновых изображений (http://www.intuit.ru/studies/courses/10621/1105/lecture/17979?page=2) увидела следующий фильтр:


    \begin{array}{|c|c|c|}
    \hline \\
    0 & 0 & 0 \\
    \hline \\
    0 & 2 & 0 \\
    \hline \\
    0 & 0 & 0 \\
    \hline 
    \end{array} - \frac{1}{9} \begin{array}{|c|c|c|}
    \hline \\
    0 & 0 & 0 \\
    \hline \\
    0 & 1 & 0 \\
    \hline \\
    0 & 0 & 0 \\
    \hline 
    \end{array}

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

Что вижу я в конструкции фильтра (скорее всего ошибочно): F(x, y) = 2 * I(x, y) - 1/9 I(x, y) = 17/9 * I(x, y), где F(x, y) - яркость отфильтрованного пикселя, а I(x, y) - яркость исходного пикселя с координатами (x, y). Что означает обычное повышение яркости изображения, при этом без учета соседних пикселей (так как их множители равны 0).

Объясните, пожалуйста, как данный фильтр может повышать четкость изображения?

Сергей Кротов
Сергей Кротов
Россия
Дмитрий Донсков
Дмитрий Донсков
Россия, Москва, Московский Авиационный Институт