Новосибирский Государственный Университет
Опубликован: 20.08.2013 | Доступ: свободный | Студентов: 865 / 38 | Длительность: 14:11:00
Самостоятельная работа 1:

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

< Лекция 5 || Самостоятельная работа 1: 12345678910 || Самостоятельная работа 2 >
2.3.3. Сборка OpenCV с использованием CMake

В данном разделе предлагается описание последовательности действий, выполнение которых необходимо для сборки библиотеки OpenCV с использованием утилиты CMake согласно руководству [8]. Несмотря на то, что CMake имеет интуитивно понятный графический интерфейс под Windows, далее описывается последовательность команд командной строки, т.к. их достаточно просто можно сопоставить с командами других платформ, как следствие, выполнить сборку OpenCV по той же схеме.

  • Создать директорию, которая будет содержать исходные коды библиотеки, например, с названием OpenCV-2.4.2 в соответствии с загружаемой версией.

  • Загрузить последнюю версию исходных кодов библиотеки с сервера проекта [5, 6]. Отметим, что для этого предварительно необходимо установить систему управления версиями Subversion [7] или любой другой клиент1 Subversion – свободная централизованная система управления версиями. Аналогами являются такие системы, как Git, Mercurial, Bazaar, Tortoise SVN (имеет графический интерфейс). в зависимости от того, какая система используется разработчиками библиотеки на момент загрузки. Ниже приведена командная строка, позволяющая загрузить исходные коды с использованием Subversion.


    В результате загрузки в OpenCV-2.4.2 будет создана вложенная директория opencv, в состав которой входят исходные коды и скрипты, необходимые для сборки решения.

    Остановимся на расположении заголовочных файлов. Файл opencv.hpp, в котором подключаются заголовочные файлы всех модулей библиотеки, расположен в директории opencv/include/opencv2. Заголовочные файлы модулей находятся по путям opencv/modules/<имя модуля>/include.

  • Опционально установить дополнительные программное обеспечение и библиотеки, которые могут потребоваться в процессе сборки OpenCV:

    • Python версии 2.6.x или 2.7.x и NumPy, если необходимо собрать обертки для Python;
    • Intel Threading Building Blocks (TBB) – библиотека разработки параллельных приложений, средства которой используются разработчиками OpenCV для распараллеливания алгоритмов на системы с общей памятью;
    • Qt версии 4.6 обеспечивает функции для создания кроссплатформенного (Windows, Linux, Mac) графического интерфейса;
    • Intel Parallel Primitives (IPP) с версии 5.1 до 6.1 для ускорения некоторых вычислительных операций (конвертирование цвета, тренировка классификатора Хаара, функции вычисления быстрого преобразования Фурье (БПФ));
    • LiveTeX (или MiKTeX под Windows, MacTeX под Mac) и Sphinx, чтобы собрать документацию OpenCV в форматах PDF и HTML;
    • последняя версия NVIDIA CUDA Toolkit, если требуется собрать GPU модуль библиотеки;
    • другое ПО и библиотеки, специфичные для Unix-систем, MacOS, Android и iOS.
  • Создать директорию, например, bin, в которую утилита CMake будет генерировать файлы сборки исходных кодов.

  • Установить созданную директорию в качестве рабочей.

  • Запустить исполняемый файл cmake утилиты CMake2Директория утилиты CMake среди бинарных файлов содержит файл cmake-gui, который позволяет использовать CMake в графическом режиме. и создать файлы описания сборки.

    Общий вид командной строки генерации приведен ниже. Также указаны две наиболее важные опции cmake, которые будут использованы далее. Полный список опций можно обнаружить, если выполнить команду cmake --help.

    cmake [options] <source_dir> 
     
    [options] – параметры конфигурации CMake и сборки OpenCV 
    <source_dir> - директория с исходными кодами библиотеки 
     
    Наиболее важные опции: 
    -D <var>:<type>=<value> используется для установки значений 
    переменных из файла описания сборки исходных кодов 
    -G <generator-name> используется для указания имени 
    генератора (полный список генераторов, доступных для данной 
    платформы, можно найти в справке к cmake)           
              

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


    Отметим, что если при инсталляции утилиты CMake были выбраны опции установки по умолчанию и путь до исполняемых модулей утилиты не был прописан в переменную окружения PATH, то при вызове необходимо указать полный путь до cmake.exe ровно так, как показано выше.

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

    -D BUILD_EXAMPLES=ON           
              

    Опция WITH_TBB=YES включает сборку библиотеки с TBB.

    -D WITH_TBB=YES           
              

    Далее следует набор параметров, связанных с расположением файлов библиотеки TBB: TBB_INCLUDE_DIRS – полный путь до заголовочных файлов библиотеки, TBB_LIB_DIR – полный путь до lib-файлов TBB, TBB_STDDEF_PATH – полный путь до файла tbb_stddef.h с объявлениями констант и некоторых типов.

    -D TBB_INCLUDE_DIRS="c:\Program Files (x86)\Intel\Composer XE 2011 SP1\tbb\include" 
    -D TBB_LIB_DIR="c:\Program Files (x86)\Intel\Composer XE 2011 SP1\tbb\lib\ia32\vc9" 
    -D TBB_STDDEF_PATH="c:\Program Files (x86)\Intel\Composer XE 2011 SP1\tbb\include\tbb\tbb_stddef.h" 
              

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

    -D WITH_IPP=YES 
    -D IPP_H_PATH="C:/Program Files (x86)/Intel/Composer XE 2011 SP1/ipp/include"           
              

    Опция –G означает, что далее будет указано имя генератора файла сборки. В данном случае используется генератор Visual Studio 10, т.е. будет сформировано решение Visual Studio 2010 для компиляции под 32-битную архитектуру.

    -G " Visual Studio 10"           
              

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


    После исполнения команды на формирование файлов описания сборки в директории bin можно обнаружить файл решения (с расширением .sln) и набор файлов проектов (.vcxproj), входящих в состав этого решения (рис. 6.9).

    Структура сгенерированных файлов для сборки OpenCV из Microsoft Visual Studio 2010

    Рис. 6.9. Структура сгенерированных файлов для сборки OpenCV из Microsoft Visual Studio 2010
  • Открыть решение OpenCV.sln.
  • Выбрать режим компиляции (Debug или Release) в выпадающем списке на панели инструментов (рис. 6.10).
    Панель инструментов для смены режима компиляции

    Рис. 6.10. Панель инструментов для смены режима компиляции
  • Выполнить команду Rebuild контекстного меню, которое выпадает при нажатии правой кнопки мыши на проекте ALL_BUILD для перекомпиляции всего решения.

В результате компиляции в директории, содержащей решение, будет создано две вложенных директории bin и lib, каждая из которых в зависимости от выбранного режима компиляции содержит папку Debug или Release с набором dll- и lib-файлов. Аналогично случаю установки с помощью инсталляционного файла, бинарные файлы, имеющие приставку 'd' в конце названия, соответствуют Debug-сборке, остальные – сборке в режиме Release.

2.3.4. Структура проектов в решении Microsoft Visual Studio для OpenCV

На данном этапе перейдем к рассмотрению основных проектов в решении и непосредственной компиляции библиотеки OpenCV. Настроим отображение панели Solution Explorer, выполнив команду главного меню View\rightarrowSolution Explorer.

В корне решения находится один единственный проект ALL_BUILD и множество папок с проектами, содержащими разного рода функционал. Проект ALL_BUILD установлен как рабочий и отвечает за компиляцию всех проектов в решении, как было замечено в предыдущем разделе. По умолчанию решение собирается в Debug-режиме. Если необходимо собрать решение в Release, то следует выбрать соответствующий режим в выпадающем списке на панели инструментов. Похожие действия (изменение конфигурации с Win32 на x64) не сработают, если требуется собрать 64-битную версию библиотеки. В этом случае необходимо заново сгенерировать решение, но при исполнении команды cmake указать другое имя генератора (например, Visual Studio 10 Win64).

Рассмотрим подробнее назначение и содержимое некоторых папок в решении:

  • 3rdparty содержит набор проектов с исходными кодами сторонних библиотек (libjasper [9], libjpeg [10], libpng [11], libtiff [12] – кодеки для работы с изображениями в соответствующих форматах, zlib [13] – библиотека для сжатия данных);
  • modules составлена из рабочих модулей библиотеки OpenCV;
  • samples – папка, содержащая множество примеров использования разных функций библиотеки;
  • tests accuracy содержит автоматические тесты для проверки корректности работы алгоритмов;
  • tests performance – набор тестов производительности программных реализаций некоторых алгоритмов.
< Лекция 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).

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