26 июл. 2012 г.

Создание проекта в MS Visual Studio, использующего OpenCV


    Добрый день, уважаемые читатели. В этой заметке я опишу один из методов, с помощью которого можно прикрутить библиотеки OpenCV к MS VS2010. Сам я промучался с этой проблемой весьма продолжительный промежуток времени, так как все руководства, которые я находил, не работали на моей системе (возможно, сказывается кривизна рук; ну да ладно, не будем об этом). Изложение материала я старался сделать максимально подробным и понятным.
    Собственно, для тех кто не знает:
OpenCV 
 это библиотека алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов общего назначения с открытым кодом. Реализована на C/C++, также разрабатывается для Python, Java, Ruby, Matlab, Lua и других языков. Может свободно использоваться в академических и коммерческих целях — распространяется в условиях лицензии BSD (Вики).
Для нижеописанных действий применялась система Windows 32-bit (проверено на Windows 7 и Windows 8) и MS Visual Studio 2010 Ultimate. Соответственно, поехали! Небольшое примечание: все картинки в заметке кликабельны.
    Во-первых, зайдем на официальный сайт OpenCV и скачаем свежую версию пакета библиотек для Windows (на текущий момент это версия 2.4.2). Далее, запустим установщик: он пр
осто разархивирует пакеты по указанному пути (пусть, для определенности, это будет « C:\ »)
    Во-вторых, скачаем систему сборки cmake и проинсталлируем ее. Выбираем путь до директории с исходниками « C:\opencv », а также директории, в которую будут помещены собранные файлы « C:\opencv\build ». Жмем « configure », затем увидим нечто такое:
    
    Далее, нажимаем configure еще раз, после чего увидим то же окно, но уже без красных меток. И, наконец, нажимаем generate. Все, наши пакеты собраны.







    Теперь перейдем к следующему шагу. В директории, которую мы указывали второй, найдем файл решения OpenCV.sln и откроем его с помощью Visual Studio. Затем построим решение для конфигурации Debug и Release [Построение -> Перестроить решение]; процедура эта не быстрая и довольно ресурсоемкая, так что придется немного подождать. Visual Studio можно закрыть.

    В-третьих, необходимо изменить системную переменную Path. Для этого заходим в свойства компьютера [Мой компьютер->Свойства], выбираем пункт "Дополнительные параметры системы", нажимаем кнопку "Переменные среды...", выбираем системную переменную PATH и нажимаем кнопку "Изменить..."; добавим следующие папки: C:\opencv\build\x86\vc10\bin;C:\opencv\build\common\tbb\ia32\vc10;
После чего перезагрузим компьютер.

    Теперь нам осталось лишь создать тестовый проект в VS, засунуть туда код OpenCV и убедиться, что все прекрасно работает.
Что ж, для создания проекта выполним такую последовательность действий: Файл → Создать → Проект (File → New → Project);
выберем Visual C++ → Win32; "Консольное приложение Win32" (Win32 Console Application); введем название нового п
роекта и нажмем "ОК"; и еще раз "Готово" (Finish).

    Теперь проведем настройку Visual Studio под наш проект.

    Выбираем Проект → Свойства (Project → Properties). В левой части выбираем "Свойства конфигурации" → "Каталоги VC++" (Configuration Properties → VC++ folders) в переменную "Каталоги библиотек" (Lib folders) добавляем путь
"C:\opencv\build\x86\vc10\lib"

    В левой части "Свойства конфигурации" → "C/C++" (Configuration Properties → C/C++) в переменную "Дополнительные каталоги включаемых файлов" (Additional Include Directories) добавляем:
    C:\opencv\build\include\opencv;C:\opencv\build\include;

    В левой части "Свойства конфигурации" → "Компоновщик" → "Ввод" (Configuration Properties → Linker → Input) в переменную "Дополнительные зависимости" (Additional Dependencies) добавляем:
    для "Debug":
    opencv_video242d.lib;opencv_ml242d.lib;opencv_legacy242d.lib;
    opencv_imgproc242d.lib;opencv_highgui242d.lib;
    opencv_core242d.lib;
    для "Release":
    opencv_video242.lib;opencv_ml242.lib;
    opencv_legacy242.lib;opencv_imgproc242.lib;
    opencv_highgui242.lib;opencv_core242.lib;
    Небольшое примечание: в каждой из прописывающихся библиотеках нужно ставить циферки, соответствующие вашей версии. Так, для версии, 2.4.2 пишем 242, для версии 2.3.1 пишем 231 ну и т.д. 

    Жмем "применить" и закрываем страницу свойств.

    И вот, долгожданный момент, вставим в наш проект тестовый код



#include "stdafx.h"
#include <highgui.h>
int _tmain(int argc, _TCHAR* argv[]) {
    int c;
    // allocate memory for an image
    IplImage *img;
    // capture from video device #1
    CvCapture* capture = cvCaptureFromCAM(1);
    // create a window to display the images
    cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);
    // position the window
    cvMoveWindow("mainWin", 5, 5);
    while(1) {
        // retrieve the captured frame
        img = cvQueryFrame(capture);
        // show the image in the window
        cvShowImage("mainWin", img );
        // wait 10 ms for a key to be pressed
        c = cvWaitKey(10);
        // escape key terminates program
        if(c == 27) break;
    }
    return 0;
}

    Построив решение и запустив проект, увидим появившееся окошко MainWin, а в нем видеопоток с веб-камеры (если она, конечно же, подключена). Если вы все сделали правильно, и камера точно подключена, но вы видите лишь пустое окошко, то попробуйте изменить значение параметра функции cvCaptureFromCAM на 0, 2 или -1 (должно помочь).

    Что ж, вроде все. Надеюсь, что эта статья была в меру полезной, и у вас все получилось.

    =)

8 комментариев:

  1. Большое спасибо за статью, очень помогло)

    ОтветитьУдалить
  2. Анонимный24.01.2013, 11:37

    Промучалась очень долго пока не нашла эту статью. Все очень подробно, а главное все наконец-то заработало! Спасибо!)

    ОтветитьУдалить
  3. Этот комментарий был удален автором.

    ОтветитьУдалить
  4. Спасибо огромное за Ваш пост! долго не мог найти толковое решение этой проблемы!) единственное пришлось качать tbb и самому создать папки common/tbb и кинуть туда скаченные файлы. делал это по инструкции:
    http://plasma.karelia.ru/~ekostq/PUBLIC/ProblInfComp/OpenCV_VC9_Setup.html
    второй пункт)

    ОтветитьУдалить
    Ответы
    1. Владислав, действительно в ряде случаев такая папка не создается, но все работает и без этого (проверено несколько раз). Рад, что это заметка оказалась полезной =)

      Удалить
    2. Этот комментарий был удален автором.

      Удалить
  5. Спасибо за толковый и подробный гайд! Все получилось и оказалось не таким сложным как казалось ранее, после беглого знакомства с opencv.
    Изображение получено, теперь осталось передать по сети на сервер :) Думаю реализовать с помощью сетевых библиотек SFML.

    ОтветитьУдалить
  6. в MS Visual Studio 2015 (windows 8 -32bit) не работает! cmake клепает в процессе компиляции vc14.. в каталогах open cv фигурирует vc10... думаю кривизна изза этого.

    ОтветитьУдалить