_


пятница, 13 мая 2011 г.

Шаманим над QT+VS2010+OPENCV
Интеграция трёх замечательных продуктов


Здравствуйте, уважаемые читатели моего блога! Недавно решил объединить три замечательные вещи: QT, Visual Studio 2010 и OpenСV. Вам интересно, почему? Тогда добро пожаловать под кат ...


Итак, объясню зачем объединять данные продукты:
Во-первых, мы получаем всю мощь библиотеки компьютерного зрения - OpenCV.
Во-вторых, зачастую, если мы работаем с изображениями, нам необходим хороший графический интерфейс. Вот тут как раз пригодится QT.
В-третьих, конечно же, не пройдем мимо возле Visual Studio 2010 - одной из лучших сред разработки в мире программирования.

Теперь, облачаемся в шаманское одеяние, берем бубен и начинаем танцевать во избежание каких-либо глюков и багов. Чтож, приступим:
1. Скачиваем подходящий SVN-клиент отсюда
1.2. Скачиваем CMAKE отсюда
1.3. Скачиваем QT source code отсюда
1.4. Скачиваем QT-плагин для VS2010 отсюда
1.5. Если вы используете Qt версии 4.8.0, то вам необходим Perl

2. Создадим папку, где будут храниться исходники OpenCV. В моем случае это папка D:\OPENCV_SVN
2.1. Качаем сорцы при помощи SVN-клиента:


2.2. Ждем, пока скачается ...
2.3.1. Запускаем CMAKE (у меня он лежит тут: C:\Program Files (x86)\CMake 2.8\bin\cmake-gui.exe)
2.3.2. Жмем Browse Source и выбираем папку с OpenCV (в моем случае это D:/OPENCV_SVN/trunk/opencv)
2.3.3. Жмем Browse Build и выбираем папку, в которой будут храниться скомпилированные библиотеки OpenCV. (у меня это папка D:/OPENCV_SVN/build)
2.3.4. Жмем Configure ->Visual Studio 10 Win64 -> Finish
2.3.5. Жмем Configure еще раз
2.3.6. Жмем Generate и закрываем CMAKE
2.4. Заходим в директорию, выбранную в шаге 2.3.3 и запускаем проект OpenCV.sln
2.5. Выбираем меню Построение -> Очистить решение
2.6. Теперь, поочереди компилируем Debug и Release версию OpenCV. Дело это не скорое, так что можете погреться возле костра и постучать в шаманский бубен :)

3. Распаковываем скаченные ранее исходники QT в папку D:\QT\. В моем случае, исходники QT находятся в папке D:\QT\qt-everywhere-opensource-src-4.7.3
3.1. Идём в Пуск -> Выполнить -> %comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" amd64
3.2. В появившемся консольном окне пишем:
set QTDIR=d:\qt\qt-everywhere-opensource-src-4.7.3\
set path=%path%;%QTDIR%\bin
cd  d:\qt\qt-everywhere-opensource-src-4.7.3\
D:
configure.exe -mp -no-qt3support -nomake demos -nomake examples
o
y
... и немного ждем ...
3.3. После конфигурации выполняем:
nmake
и ОЧЕНЬ долго ждем :(

4. Устанавливаем скаченный QT-плагин.
4.1. Запускаем Visual Studio 2010, заходим во меню Qt -> Qt Options
4.2. Проверяем на наличие установленной версии, если таковая отсутствует - добавляем:
Version name: 4.7.3
Path: D:\QT\qt-everywhere-opensource-src-4.7.3

5. Пуск - выполнить -> rundll32.exe sysdm.cpl, EditEnvironmentVariables
5.1. Выбираем PATH -> Изменить
5.2. Добавляем в конец ;D:\OPENCV_SVN\build\bin\Debug;D:\QT\qt-everywhere-opensource-src-4.7.3\bin;
5.3. Сохраняем изменения

6. Далее, создадим небольшой проект, в котором используются возможности  QT, Visual Studio 2010 и OpenСV
6.1. Создаем новый проект, выбираем в самом верху Qt4 Projects -> Qt Application -> Finish
6.2. Меняем активную конфигурацию Решения на Debug|x64
6.3. Заходим в свойства проекта
6.3.1. Переходим в Каталоги VC++
В Каталоги включения добавляем:
D:\OPENCV_SVN\trunk\opencv\3rdparty\include  
D:\OPENCV_SVN\trunk\opencv\include\opencv
D:\OPENCV_SVN\trunk\opencv\modules\calib3d\include  
D:\OPENCV_SVN\trunk\opencv\modules\core\include
D:\OPENCV_SVN\trunk\opencv\modules\features2d\include
D:\OPENCV_SVN\trunk\opencv\modules\flann\include 
D:\OPENCV_SVN\trunk\opencv\modules\highgui\include
D:\OPENCV_SVN\trunk\opencv\modules\imgproc\include
D:\OPENCV_SVN\trunk\opencv\modules\legacy\include
D:\OPENCV_SVN\trunk\opencv\modules\objdetect\include  
D:\OPENCV_SVN\trunk\opencv\modules\video\include
D:\qt\qt-everywhere-opensource-src-4.7.3\include
В Каталог библиотек добавляем:
D:\OPENCV_SVN\build\lib\Debug
D:\qt\qt-everywhere-opensource-src-4.7.3\lib

6.3.2. Переходим в Компоновщик -> Ввод
В Дополнительные зависимости добавляем:
qtmaind.lib
QtCored4.lib

QtGuid4.lib
opencv_core229d.lib 
opencv_calib3d229d.lib

opencv_features2d229d.lib
opencv_highgui229d.lib

opencv_imgproc229d.lib
opencv_legacy229d.lib

opencv_objdetect229d.lib
opencv_video229d.lib


6.3.3. Добавляем в заголовочный файл:
#include <opencv2/core/core_c.h>
#include <opencv2/core/core.hpp>

#include <opencv2/calib3d/calib3d.hpp>
#include <opencv2/features2d/features2d.hpp>

#include <opencv2/imgproc/imgproc_c.h>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <opencv2/highgui/highgui.hpp>

#include <opencv2/objdetect/objdetect.hpp>

6.3.4. Выделяем проект, заходим в Qt -> Qt Project Settings -> Устанавливаем нужную Version

7. Вот собственно и всё. Делал сам от начала и до конца, надеюсь, что ошибок нет :)

Внимание! Публиковать материалы, представленные в этом блоге можно ТОЛЬКО с разрешения автора блога! 

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

Headmast комментирует...

Заметил в командной строке на скрине слово андроид, ты что-то под него уже писал с использованием openCV?

Андрей комментирует...

Нет, пока еще не пробовал, но, думаю летом, после сессии обязательно попробую :)

Headmast комментирует...

Аналогично)

Йори комментирует...

извините, у меня windows 7 стоит и я не могу понять что с функцией nmake. "nmake" не является внутренней или внешней командой, исполняемой программой или пакетным файлом

Йори комментирует...

C:\QT\qt-everywhere-opensource-src-4.7.3>configure.exe -mp -no-qt3support -nomak
e demos -nomake examples
Unable to detect the platform from environment. Use -platform command lineargume
nt or set the QMAKESPEC environment variable and run configure again
See the README file for a list of supported operating systems and compilers.

Андрей комментирует...

Йори, шаг 3.1 пропустили. Там необходимо запустить vcvarsall.bat с необходимыми параметрами. Так как у меня платформа x86-64, я указывал свои параметры. Как у вас - я не знаю. Но проблема именно в этом.

Йори комментирует...

Извините пожалуйста за очередной глупый вопрос, но на пункт 3.1 получаю следующее сообщение: The specified configuration type is missing. The tools for the configuration might not be installed. Подскажите чего не хватает.ю что необходимо установить? OC у меня 64-bit.

Йори комментирует...

и подскажите пожалуйста, плочему возможна такое, что при конфигурации, если выбрать Жмем Configure ->Visual Studio 10 Win64 -> Finish то он выдаёт ошибку: Error in configuration process? project files may be invalid. А если выбрать Configure ->Visual Studio 10 -> Finish, то он удачно всё конфигурирует...

Андрей комментирует...

Необходимо установить "x64 Compilers and Tools". Я устанавливал их с WinSDK. Вроде в установщике Visual Studio они тоже присутствуют.

Ссылки:
1. http://msdn.microsoft.com/en-us/library/ms246588(v=vs.80).aspx
2. http://www.codebase.com/support/kb/?article=C01130
3. http://www.w7forums.com/vcvarsall-bat-no-64bit-support-vcvars64-bat-missing-t6606.html

Йори комментирует...

большое спасибо за помощь, буду биться дальше)))

Йори комментирует...

подскажите пожалуйста, не возникнут ли проблемы если я использую VISUAL C++ 2010 EXPRESS?

Андрей комментирует...

Йори, я не юзал VISUAL C++ 2010 EXPRESS. Все вышеперечисленные действия осуществлялись в VS2010 Ultimate. Вы попробуйте, если не получится - обращайтесь :)

Йори комментирует...

пробовал на Express. Дело в том, что я начинаю только осваивать с++ и вижак. и столкнулся с тем, что необходима эта библиотека. А опыта в установке библиотек в вижак к сожалению пока нет((( Зато на Ультиматум всё получилось установить, но ультиматум у меня тока на 30 дней(((

Андрей комментирует...

Йори, могу сказать, что я изучаю C++ с начала этого года(предпочитаемый мною язык C#). Я понятия не имел про подключение библиотек, хидеров и прочего. С Qt я начал работать ... хм, дайте подумать ... с 5 апреля :) Ultimate Edition поищите на рутрекере. А вообще, использование нелегального ПО ... ну сами знаете - на свой страх и риск :) К примеру, у меня в универе бесплатно давали студию в рамках сотрудничества с MS.

Йори комментирует...

в том то и дело, что нелегальное ПО не камильфо))) работаю в рамках государственной структуры

Slippy комментирует...

Спасибо за статью, всё получилось :)

Анонимный комментирует...

Добрый день, как ты считаешь, какое приложение для обработки видео будет быстрее работать, написанное на C# или C++? У меня большой опыт в программировании на C# и небольшой на C++ WinAPI, какой язык лучше выбрать? В целом, почитал про MFC, все понятно, но есть ли особый смысл туда лезть дальше, если нет огромной разницы. Проект по слежению за людьми, должен работать в реальном времени, использую optical flow.

Андрей комментирует...

Анонимный, код на C# - управляемый, а на C++ (pure) код неуправляемый, следовательно программы на C# будут медленне работать, чем аналогичные программы написанные на C++. MFC тут не при чем. Код вашего проекта можно разделить на пару частей. Первая будет отвечать за обработку видео-потока, а вторая часть - выводить информацию. В вашем случае, первую часть можно (нужно) написать на C++, а вторую часть - на ваш выбор. GUI удобнее разрабатывать на C#, но в данном случае необходимо продумать взаимодействие между частями C++ <=> C#. Если вам интересно, то можете почитать в моем блоге статью (не мою) про взаимодействие. Но, мне кажется, наилучший вариант - использование связки Qt <=> C++. Примерно полгода назад я задался тем же вопросом (вот ссылка http://rsdn.ru/forum/cpp/4221775.aspx)

p.s. Укажите хотя бы свой ник, пожалуйста :)

Андрей комментирует...

Setner, странно, что ваш комментарий не запостился сюда ... когда то я тоже юзал враппер EmguCV, но все же отказался от него в пользу (непосредственно) OpenCV. Вообщем, решайте сами :)

Setner комментирует...

Андрей, юзаю OpenCV, установил QT по инструкции, все прошло. Но не работают функции библиотек qt (например, пишу CvFont font = cvFontQt("Times");). Все подключил правильно в настройках студии, проверял много раз. Компилятор говорит, что нет реализации для такой функции, в какой библиотеке qt она лежит? все библиотеки подключил, сам openCV работает нормально.

Setner комментирует...

Андрей, возникла проблема: сделал все, как у вас в статье, не работали функции qt, остальное все работало. Нашел решение: программа CMAKE версии 2.8 не ставить флаг включения WITH_QT (кому надо можно также добавить WITH_QT_OPENGL) при построении проекта в Visual Studio 2010, надо добавить его и заново перекомпилировать проект в студии, тогда все работает. Наверное пост опять не отправится, но все равно напишите людям, чтобы не мучились с этим.
Setner

Андрей комментирует...

Setner, добавил ваши комментарии за вас :) Когда пишите коммент, выбирайте "Подпись комментария" = "Имя/URL", там можно ввести ник. Также, можно обойти глюки с отправкой комментов таким образом: нажимаете кнопку "Просмотр", заполняете поле комментария, вводите капчу и жмете "Отправить комментарий".

p.s. Спасибо за информацию - жаль я не успел вам ответить, ну зато вы сами догадались ^_^

Quaker комментирует...

Для тех кто дружит с английским, есть очень хорошее описание процесса сборки, а также наглядное видео:
http://opencv.itseez.com/doc/tutorials/introduction/windows_install/windows_install.html
У меня по этому описанию све собралось.
Для нуждающихся выкладываю результаты (Visual Studio 2010):
http://narod.ru/disk/24743083001/opencv_x86_vc10.7z.html

Denis комментирует...

Здравствуйте. У меня после пункта 3.3 стопорится
NMAKE : fatal error U1077: "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\x64\mt.exe" : возвращенный код "0x1f"
Stop.
NMAKE : fatal error U1077: "d:\Microsoft Visual Studio 2010...xe" : возвращенный код "0x2"
Stop.
NMAKE : fatal error U1077: cd : возвращенный код "0x2"
Stop.
NMAKE : fatal error U1077: cd : возвращенный код "0x2"
Stop.
NMAKE : fatal error U1077: cd : возвращенный код "0x2"
Stop.

Андрей комментирует...

Denis, система 64 битная ? Если нет, то на шаге 3.1 выбирается другая среда (x86)

Denis комментирует...

Андрей, 64-разрядная
может в пункте 3.1 intel64 вместо amd64 хотя это одно и тоже по сути)

Андрей комментирует...

Денис, если у вас 64 битная, то будет amd64 - так как этот параметр (и только он в данной ситуации) необходим для вызова специфических настроек под вашу платформу.
Насчет ошибки - не знаю, так как вы предоставили мало информации.

Denis комментирует...

amd64 и написал.
ОС Win7 Ultimate sp1
VS 2010 Ultimate
эти ошибки обнаружились спустя 80 минут, после начала построения проекта (nmake)

Андрей комментирует...

Скиньте побольше лога на http://pastebin.com/

Denis комментирует...

повторил 3.1-3.3 собралось довольно таки быстро минут 15, потом установил плагин как написано, запустил VS 2010 не могу зайти в меню Qt -> Qt Options)

Denis комментирует...

немного по другому сделал, пока с qt - скачал готовую сборку Qt_SDK_Win_offline_v1_1_3_en установил, установил Qt-плагин qt-vs-addin-1.1.9, все равно в меню VS 2010 не QT) в чем может быть ошибка?

Андрей комментирует...

Денис, надо смотреть логи установки плагина, должны быть где-то. Надеюсь, всё с правами администратора устанавливается?

Denis комментирует...

Установил с правом администратора. появилось в меню vs QT)Не подскажете как с учетом установки Qt_SDK_Win выполнить пункты 4.2 5.2.
В opencv при компиляции ошибка: opencv_highgui231d.lib(opencv_highgui231d.dll) : fatal error LNK1112: тип компьютера модуля "x64" противоречит типу целевого компьютера "X86"

Denis комментирует...

второй вопрос снят, поменял разрядность в vs

Dez комментирует...

Здраствуйте. Поглядев на .NET VС++(точнее мельком глянув) решил что лучше я познаю Qt, нежели это извращение.

Имеется: Win7 x64 Pro, VS10 Ultimate, скачанный Add-in к студии, Qt libraries 4.6.4 for Windows (VS 2008)
все прекрасно встало, компилится, вроде работает, но не запускается если собирать Debug версию, Release прекрасно запускается =\ можете подсказать в чем трабл? сам qt еще не трогал, только скачал книги и начал обустраивать рабочее место.

Андрей комментирует...

Dez, разработка грфического интерфейса на C++/CLI тоже мне не подвластна :) Именно поэтому выбрал Qt. Так как, увы, я не телепат, следовательно, на основе ваших данных я не могу строить какие-либо гипотезы. Приведите логи, ошибки ... etc, возникающие при сборке в дебаге.

Dez комментирует...

Андрей, http://codepad.org/B5Rdr5Jb логи компиляции и лог sxstrace для запуска debug сборки. Release запускается без проблем

Андрей комментирует...

VC++ Redistributable Package скачайте с микрософта и установите ... думаю поможет :)

Dez комментирует...

Не смешная шутка. Он вместе со многими играми и студией ставится.

Андрей комментирует...

Я серьезно. Потому что в логе только одно подозрительно выглядит: "Ошибка: не удается разрешить ссылку Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"."

Видимо приложение пытается найти сборку и обламывается ... попробуйте в корень (там где исполняемый файл) закинуть msvcrt90.dll или msvcrt.dll, поэкспериментируйте.

Тем более версии vcredist разные бывают ...

Либо необходимо больше данных, так как из лога я больше ничего не выцепил полезного

Да и гляньте версии ваших сборок msvcrt90.dll или msvcrt.dll ... так как требуется 9.0.21022.8

Либо юзайте Dependency Walker, который подскажет, каких зависимостей не хватает ... не забудьте отписаться, мне интересно стало :)

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

DW показал отсутствие
MSVCP90D.DLL
MSVCR90D.DLL
IESHIMS.DLL

поиск по C: не выдал либ SVCP90D.DLL и MSVCR90D.DLL третья нашлась у IE
Спасибо за совет о DW.

В "программы и компоненты" числятся нужные платформы, но видимо без отладочных версий, вот и не работало:
http://dl.dropbox.com/u/17372745/v90.png
отсюда и получается, что release работает, а debug - нет.
Утром попробую поставить редист для студий 05-10 выпусков. отпишусь что выйдет... скорее всего, заработает.

Dez комментирует...

Не заработало, те пакеты не содержали debug сборок. Придется ставить студию и выдирать из нее.
http://banderlogi.blogspot.com/2011/01/debug-visual-c-redistributable-package.html вот так.

Анонимный комментирует...

Здравствуйте. у меня при отладки программы - вылетает ошибка - запуск программы невозможен, так как на компьютере отсутствует opencv_core231d.dll. Попробуйте переустановить программу.
подскажите в чем проблема, вроде все сделал как выше приведено.

Анонимный комментирует...

Анонимный, пункты 5 - 5.3 читаем внимательнее (особенно 5.2) и не копипастим.

Анонимный комментирует...

там все нормально, вот в пункте 2.6 компиляция Debug завершилась ошибкой "не удается запустить программу D:\OPENCV_SVN\build\x64\Debug\ALL_BUILD Не удается найти указанный файл

Анонимный комментирует...

Значит не хватает библиотеки opencv_core231d.dll, которая не сбилдилась на шаге 2.6
Надо больше информации по поводу ошибок 2.6
Архитектура процессора, надеюсь, x64 ?

Анонимный комментирует...

архитектура х64, opencv_core231d.dll сбилдилась лежит здесь D:\OPENCV_SVN\build\bin\Debug

Анонимный комментирует...

по поводу архитектуры amd64, т.е х86

Анонимный комментирует...

Проверь пункты 6.3.1 и 6.3.2

Анонимный комментирует...

проверил, все так только в 6.3.2 вместо 229 231 писал, т.к версия 2.3.1

Анонимный комментирует...

Как вариант, можно попробывать скинуть пропавшую dll в директорию с программой. Это конечно не самый лучший способ, но должно сработать. Сборка идет в Release или в Debug ?

Анонимный комментирует...

кинул в директорию ту самую dll заработало) сборка идет в debug

electrodrel комментирует...

Большое спасибо за такую четкую и понятную инструкцию. На win xp заработало все и сразу, а вот на win7 заставить корректно работать qt designer так и не удалось, хотя все делала также.

Андрей А комментирует...

electrodrel, я делал руководство под windows 7 x64. Попробуйте на вин7 выполнять команды от имени администратора и повнимательнее смотреть лог-файлы.

Анонимный комментирует...

Здравствуйте, може вопрос глупый, но у меня нет в списке шаблонов проектов Qt (п. 6.1). Все предыдущие пункты вроде без ошибок...

Андрей А комментирует...

Привет. Скорее всего неправильно установился Qt-плагин

Анонимный комментирует...

Пункт меню Qt появися, но в нем только Дизайнер, Лингвіст і можно открыть файл проекта (*.pro). А как собственно создать проект Qt?

Андрей А комментирует...

Создать проект можно через обычный мастер меню File -> New -> Project ...

Там найдете то, что вам нужно. Если же ничего не выйдет, выложите инфу об ОС, версии визуал-студии, версии qt и qt-плагина

Анонимный комментирует...

Windows 7 Ultimate SP1;
VS 2010 10.0.30379.1;
qt-everywhere-opensource-src-4.7.3;
qt-vs-addin-1.1.9

(VC++, C#...) просто нет такого пункта Qt4 %(. Спасибо

Андрей А комментирует...

qt-vs-addin-1.1.9 от имени администратора ставите, надеюсь?

Анонимный комментирует...

Андрей, да от администратора, и консоль тоже). Ось х86

Андрей А комментирует...

Странно. Я буквально на днях все шаги повторил (единственное, что поменялось - версия Qt 4.8.0, и у меня система 64-битная, но это сильно сути не меняет)

Вот так выглядит у меня мастер создания проектов: http://rghost.ru/37277232/image.png

p.s. ошибки какие-нибудь в процессе установки/настройки не возникали?

Denis комментирует...

здравствуйте. помогите пжл, вот такая ошибка
fatal error LNK1104: не удается открыть файл "opencv_core231d.lib"

Андрей А комментирует...

Denis, проверь хорошо пункты 6.3.1 и 6.3.2

Denis комментирует...

спасибо) пропустил 5 пункт))

AlixBZ комментирует...

Поправьте QT на Qt все-же QT это Quick Time. В целом - спасибо. Просто и со вкусом)

Анонимный комментирует...

Здравствуйте.
Не может найти найти файлы "gst/..". Это я упустил какой-то пункт или нужно что-то дополнительно какчать?
Спасибо.

Aleksey Goncharenko комментирует...

Добрый вечер.
Архитектура компьютера x64 под управлением OC Win7 Professional x64, среда разработки VS 2010 Professional ver.10.0.40219.1 SP1. Как я понимаю при сборке OpenCV на шаге 2.3.4., мне необходимо выбрать для моей конфигурации Visual Studio 10 Win64.
Вопрос: Будут ли написанные 64-х битные приложения на раб.машиге, а вместе с ними и 64-х битные библиотеки OpenCV правильно исполняться на компах с архитектурой x86, или компах с архитектурой x64 но под управлением 32-х разрядных операционных систем?

Отправить комментарий