Добрый день, уважаемые читатели. В этой заметке я опишу один из методов, с помощью которого можно прикрутить библиотеки 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 », затем увидим нечто такое:
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 (должно помочь).
Что ж, вроде все. Надеюсь, что эта статья была в меру полезной, и у вас все получилось.
=)
выберем 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 (должно помочь).
Что ж, вроде все. Надеюсь, что эта статья была в меру полезной, и у вас все получилось.
=)
Большое спасибо за статью, очень помогло)
ОтветитьУдалитьПромучалась очень долго пока не нашла эту статью. Все очень подробно, а главное все наконец-то заработало! Спасибо!)
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьСпасибо огромное за Ваш пост! долго не мог найти толковое решение этой проблемы!) единственное пришлось качать tbb и самому создать папки common/tbb и кинуть туда скаченные файлы. делал это по инструкции:
ОтветитьУдалитьhttp://plasma.karelia.ru/~ekostq/PUBLIC/ProblInfComp/OpenCV_VC9_Setup.html
второй пункт)
Владислав, действительно в ряде случаев такая папка не создается, но все работает и без этого (проверено несколько раз). Рад, что это заметка оказалась полезной =)
УдалитьЭтот комментарий был удален автором.
УдалитьСпасибо за толковый и подробный гайд! Все получилось и оказалось не таким сложным как казалось ранее, после беглого знакомства с opencv.
ОтветитьУдалитьИзображение получено, теперь осталось передать по сети на сервер :) Думаю реализовать с помощью сетевых библиотек SFML.
в MS Visual Studio 2015 (windows 8 -32bit) не работает! cmake клепает в процессе компиляции vc14.. в каталогах open cv фигурирует vc10... думаю кривизна изза этого.
ОтветитьУдалить