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

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

< Лекция 5 || Самостоятельная работа 1: 12345678910 || Самостоятельная работа 2 >

3. Подготовка среды Microsoft Visual Studio для разработки приложений с использованием OpenCV

3.1. Создание проекта

Прежде всего, создадим новое Решение (Solution), в которое включим первый Проект (Project) данной лабораторной работы. Последовательно выполните следующие шаги:

  1. Запустите приложение Microsoft Visual Studio 2010.
  2. В меню File выполните команду New\rightarrowProject….
  3. Как показано на рис. 6.11, в диалоговом окне New Project в типах проекта выберите Win32, в шаблонах Win32 Console Application, в поле Name введите название проекта (для каждого приложения будет использовано свое название), в поле Solution Name – название решения 01_OpenCV, в поле Location укажите путь к папке с лабораторными работами. Нажмите OK.
    Создание решения для лабораторной работы

    Рис. 6.11. Создание решения для лабораторной работы
  4. В диалоговом окне Win32 Application Wizard нажмите Next (или выберите Application Settings в дереве слева) и установите флаг Empty Project. Нажмите Finish.
  5. В окне Solution Explorer в папке Source Files выполните команду контекстного меню Add\rightarrowNew Item…. В дереве категорий слева выберите Code, в шаблонах справа – C++ File (.cpp), в поле Name введите имя файла main. Нажмите Add. В результате выполненной последовательности действий в окне редактора кода Visual Studio будет открыт пустой файл main.cpp.

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

int main(int argc, char *argv[]) 
{ 
  // TODO: source code 
  return 0; 
}     
    

3.2. Настройка свойств проекта

Процесс настройки свойств проекта сводится к выполнению трех действий:

  • Установка путей до заголовочных файлов библиотеки OpenCV. Выполните команду контекстного меню Properties, чтобы получить доступ к настройкам проекта. Откройте вкладку Configuration Properties\rightarrowC/C++\rightarrowGeneral (рис. 6.12). Сверху в окне свойств в выпадающем списке Configuration выберите значение All Configurations, чтобы установить свойство для всех режимов компиляции (Debug и Release). В поле Additional Include Directories укажите пути до заголовочных файлов библиотеки OpenCV. В предыдущих разделах при описании процедур установки отдельно были отмечены директории, содержащие заголовочные файлы библиотеки OpenCV. Они различаются в зависимости от типа установки. Нажмите кнопку Apply, чтобы применить указанное свойство.
    Окно свойств проекта для установки путей до заголовочных файлов подключаемых библиотек

    Рис. 6.12. Окно свойств проекта для установки путей до заголовочных файлов подключаемых библиотек
  • Установка путей до подключаемых библиотек (lib-файлов). Откройте вкладку Configuration Properties\rightarrowLinker\rightarrowGeneral (рис. 6.13). Сверху в окне свойств в выпадающем списке Configuration выберите значение Debug. В поле Additional Library Directories укажите путь до lib-файлов, скомпилированных в режиме Debug. В предыдущих разделах при описании процедур установки отдельно были отмечены директории, содержащие lib-файлы библиотеки OpenCV. Они различаются в зависимости от типа установки. В окне свойств в выпадающем списке Configuration выберите значение Release и установите пути до lib-файлов, собранных в режиме Release.
    Окно свойств проекта для установки путей до подключаемых библиотек

    Рис. 6.13. Окно свойств проекта для установки путей до подключаемых библиотек
  • Указание списка подключаемых программных библиотек. Откройте вкладку Configuration Properties\rightarrowLinker\rightarrowInput (рис. 6.14). Сначала в окне свойств в выпадающем списке Configuration выберите значение Debug и установите в поле Additional Dependencies список lib-файлов. Схема именования lib-файлов следующая: opencv_<мод><вер>d.lib, где <мод> – название подключаемого модуля, <вер> – версия библиотеки (например, opencv_core249d.lib). Аналогичные действия необходимо проделать для режима Release, указав список lib-файлов с названиями вида opencv_<мод><вер>.lib (например, opencv_core249.lib). Отметим, что можно подключать не все модули библиотеки, а только те, функционал которых будет использован в процессе разработки приложений.
    Окно свойств проекта для установки списка подключаемых библиотек

    Рис. 6.14. Окно свойств проекта для установки списка подключаемых библиотек

3.3. Подключение заголовочных файлов в исходном коде приложения

Чтобы использовать функции библиотеки OpenCV при разработке собственных приложений, достаточно подключить заголовочный файл opencv.hpp, содержащий подключение большинства установленных модулей библиотеки, и пространство имен cv, в которое заключены все функции библиотеки.

#include <opencv2\opencv.hpp> 
using namespace cv;     
    

Если заранее известно, что в процессе разработки будет использован функционал конкретного набора модулей, то можно подключить только заголовочные файлы соответствующих модулей, например:

#include <opencv2\core.hpp> 
#include <opencv2\objdetect.hpp> 
 
using namespace cv;     
    

3.4. Компиляция и запуск программы. Возможные проблемы и пути их решения

Чтобы протестировать корректность настроек, подключите заголовочные файлы библиотеки OpenCV в файл main.cpp в соответствии с указаниями раздела 3.3 и скомпилируйте программу посредством нажатия клавиши F7, или используя пункт Build главного меню.

В процессе компиляции могут возникнуть следующие проблемы:

  1. Ошибка открытия заголовочного файла. Примерный текст ошибки приведен ниже. Суть проблемы состоит в том, что указаны неправильные пути до подключаемых заголовочных файлов библиотеки. Решение – проверить в настройках проекта корректность путей до заголовочных файлов (см. указания раздела 3.2).
    fatal error C1083: Cannot open include file: 
    'opencv2/opencv.hpp': No such file or directory       
          
  2. Ошибка линковки с модулем библиотеки OpenCV. Текст ошибки приведен ниже. Проблема состоит в том, что указаны неправильные пути до подключаемых lib-файлов. Решение – проверить в настройках проекта корректность путей до lib-файлов (см. раздел 3.2).
    LINK : fatal error LNK1104: 
    cannot open file 'opencv_core242d.lib'       
          
  3. Ошибки линковки, связанные с отсутствием реализации некоторых функций библиотеки OpenCV. Пример такой ошибки приведен далее. Проблема состоит в том, что не подключен модуль (lib-файл), содержащий реализацию указанной в тексте ошибки функции. Решение – добавить в список lib-файлов необходимый модуль (см. раздел 3.2).
    error LNK2019: unresolved external symbol 
    "void __cdecl cv::line(class cv::Mat &, 
    class cv::Point_<int>,class cv::Point_<int>, 
    class cv::Scalar_<double> const &,int,int,int)" 
    (?line@cv@@YAXAAVMat@1@V?$Point_@H@1@1ABV?$Scalar_@N@1@HHH@
    Z) referenced in function _main       
          

Когда программа скомпилировалась, запустите ее. Для этого можно нажать сочетание клавиш Ctrl+F5, либо воспользоваться пунктом Start Without Debugging главного меню. При попытке запуска может возникнуть ошибка, показанная на рисунке (рис. 6.15).

Ошибка исполнения

Рис. 6.15. Ошибка исполнения

Проблема в том, что при исполнении выполняется поиск dll-файлов библиотеки OpenCV, и среда не находит указанные бинарные файлы. Существует два варианта решения данной проблемы:

  1. Задать в переменной окружения PATH пути до dll-файлов библиотеки OpenCV. В зависимости от способа установки библиотеки пути необходимо указать тот или иной путь (см. разделы 2.2 или 2.3).
  2. Скопировать указанный dll-файл к исполняемым файлам программы. Очевидно, что такой dll-файл будет не единственный, поэтому требуется последовательно копировать запрашиваемые файлы. Заметим, что если библиотека OpenCV собрана с поддержкой параллелизма, то также потребуется скопировать dll-файлы библиотеки Intel Threading Building Blocks (tbb_debug.dll, tbbmalloc_debug.dll или tbb.dll, tbbmalloc.dll), при условии, что TBB не установлена на рабочей машине, либо переменная окружения PATH не содержит путь до dll-файлов, входящих в ее состав.
< Лекция 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).

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

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