При прохождении теста 1 в нем оказались вопросы, который во-первых в 1 лекции не рассматривались, во-вторых, оказалось, что вопрос был рассмаотрен в самостоятельно работе №2. Это значит, что их нужно выполнить перед прохождением теста? или это ошибка? |
Сборка и установка библиотеки OpenCV. Использование библиотеки в среде Microsoft Visual Studio
3. Подготовка среды Microsoft Visual Studio для разработки приложений с использованием OpenCV
3.1. Создание проекта
Прежде всего, создадим новое Решение (Solution), в которое включим первый Проект (Project) данной лабораторной работы. Последовательно выполните следующие шаги:
- Запустите приложение Microsoft Visual Studio 2010.
- В меню File выполните команду NewProject….
- Как показано на рис. 6.11, в диалоговом окне New Project в типах проекта выберите Win32, в шаблонах Win32 Console Application, в поле Name введите название проекта (для каждого приложения будет использовано свое название), в поле Solution Name – название решения 01_OpenCV, в поле Location укажите путь к папке с лабораторными работами. Нажмите OK.
- В диалоговом окне Win32 Application Wizard нажмите Next (или выберите Application Settings в дереве слева) и установите флаг Empty Project. Нажмите Finish.
- В окне Solution Explorer в папке Source Files выполните команду контекстного меню AddNew 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 PropertiesC/C++General (рис. 6.12). Сверху в окне свойств в выпадающем списке Configuration выберите значение All Configurations, чтобы установить свойство для всех режимов компиляции (Debug и Release). В поле Additional Include Directories укажите пути до заголовочных файлов библиотеки OpenCV. В предыдущих разделах при описании процедур установки отдельно были отмечены директории, содержащие заголовочные файлы библиотеки OpenCV. Они различаются в зависимости от типа установки. Нажмите кнопку Apply, чтобы применить указанное свойство.
- Установка путей до подключаемых библиотек (lib-файлов). Откройте вкладку Configuration PropertiesLinkerGeneral (рис. 6.13). Сверху в окне свойств в выпадающем списке Configuration выберите значение Debug. В поле Additional Library Directories укажите путь до lib-файлов, скомпилированных в режиме Debug. В предыдущих разделах при описании процедур установки отдельно были отмечены директории, содержащие lib-файлы библиотеки OpenCV. Они различаются в зависимости от типа установки. В окне свойств в выпадающем списке Configuration выберите значение Release и установите пути до lib-файлов, собранных в режиме Release.
- Указание списка подключаемых программных библиотек. Откройте вкладку Configuration PropertiesLinkerInput (рис. 6.14). Сначала в окне свойств в выпадающем списке Configuration выберите значение Debug и установите в поле Additional Dependencies список lib-файлов. Схема именования lib-файлов следующая: opencv_<мод><вер>d.lib, где <мод> – название подключаемого модуля, <вер> – версия библиотеки (например, opencv_core249d.lib). Аналогичные действия необходимо проделать для режима Release, указав список lib-файлов с названиями вида opencv_<мод><вер>.lib (например, opencv_core249.lib). Отметим, что можно подключать не все модули библиотеки, а только те, функционал которых будет использован в процессе разработки приложений.
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 главного меню.
В процессе компиляции могут возникнуть следующие проблемы:
- Ошибка открытия заголовочного файла. Примерный текст ошибки приведен ниже. Суть проблемы состоит в том, что указаны неправильные пути до подключаемых заголовочных файлов библиотеки. Решение – проверить в настройках проекта корректность путей до заголовочных файлов (см. указания раздела 3.2).
fatal error C1083: Cannot open include file: 'opencv2/opencv.hpp': No such file or directory
- Ошибка линковки с модулем библиотеки OpenCV. Текст ошибки приведен ниже. Проблема состоит в том, что указаны неправильные пути до подключаемых lib-файлов. Решение – проверить в настройках проекта корректность путей до lib-файлов (см. раздел 3.2).
LINK : fatal error LNK1104: cannot open file 'opencv_core242d.lib'
- Ошибки линковки, связанные с отсутствием реализации некоторых функций библиотеки 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).
Проблема в том, что при исполнении выполняется поиск dll-файлов библиотеки OpenCV, и среда не находит указанные бинарные файлы. Существует два варианта решения данной проблемы:
- Задать в переменной окружения PATH пути до dll-файлов библиотеки OpenCV. В зависимости от способа установки библиотеки пути необходимо указать тот или иной путь (см. разделы 2.2 или 2.3).
- Скопировать указанный dll-файл к исполняемым файлам программы. Очевидно, что такой dll-файл будет не единственный, поэтому требуется последовательно копировать запрашиваемые файлы. Заметим, что если библиотека OpenCV собрана с поддержкой параллелизма, то также потребуется скопировать dll-файлы библиотеки Intel Threading Building Blocks (tbb_debug.dll, tbbmalloc_debug.dll или tbb.dll, tbbmalloc.dll), при условии, что TBB не установлена на рабочей машине, либо переменная окружения PATH не содержит путь до dll-файлов, входящих в ее состав.