OpenCV - установка 2.3.1


Установка OpenCV 2.3.1 никакой трудности не представляет.
Скачиваем OpenCV-2.3.1-win-superpack.exe (131.1 MB — 7z SFX).
Запускаем этот самораспаковывающийся архив и указываем путь распаковки, например корень диска C: (после распаковки, c:\opencv занимает 1.2 Gb O_o — впрочем, большая часть — это собранные файлы библиотеки под разные платформы (intel64, GPU) и версии компиляторов и если удалить ненужные файлы, то библиотека ужмётся до 300MB).
Если у вас установлен CMake, то в директории в которую вы распаковали OpenCV можно выполнить команду
cmake . -G "Visual Studio 9 2008"
, чтобы сгенерировать проект (для Visual Studio 2008) — ALL_BUILD.vcproj, для удобной навигации и самостоятельной сборки OpenCV.
Однако, делать это не обязательно, т.к. в директории build уже есть скомпилированные версии библиотеки под разные системы и версии Visual Studio.
Т.о. для VS 2008 прописываем:
1. пути к dll-кам в системную переменную PATH
(Мой компьютер — Свойства — Дополнительно — Переменные среды)
C:\opencv\build\x86\vc9\bin\;C:\opencv\build\common\tbb\ia32\vc9\

в Windows XP после этого требуется перезагрузка :(


2. Настраиваем Visual Studio IDE (например, Express Edition)
2.1. прописываем путь к заголовочным файлам (по необходимости удаляя пути к старой версии библиотеки):
Tools–>Options–>Projects–>VC++ Directories–>Include files
C:\opencv\build\include\opencv
C:\opencv\build\include\

2.2. путь к lib-файлам:
Tools–>Options–>Projects–>VC++ Directories–>Library files
C:\opencv\build\x86\vc9\lib\


2.3. для удобства, можно указать каталоги исходных файлов
Tools–>Options–>Projects–>VC++ Directories–>Source files
c:\opencv\modules\calib3d
c:\opencv\modules\contrib
c:\opencv\modules\core
c:\opencv\modules\features2d
c:\opencv\modules\flann
c:\opencv\modules\gpu
c:\opencv\modules\haartraining
c:\opencv\modules\highgui
c:\opencv\modules\imgproc
c:\opencv\modules\legacy
c:\opencv\modules\ml
c:\opencv\modules\objdetect
c:\opencv\modules\traincascade
c:\opencv\modules\ts
c:\opencv\modules\video


2.4. Остаётся прописать в настройках вашего проекта (Project->Properties->Configuration Properties->Linker->Input) необходимые lib-файлы.
Но можно, например, просто прописать в заголовочном файле проекта:

#include <opencv2/opencv.hpp>

#ifdef _MSC_VER
# if CV_MAJOR_VERSION == 2 && CV_MINOR_VERSION == 3 && CV_SUBMINOR_VERSION == 1
// OpenCV 2.3.1
#  if defined(_DEBUG)
#  pragma comment(lib, "opencv_core231d.lib")
#  pragma comment(lib, "opencv_highgui231d.lib")
#  pragma comment(lib, "opencv_imgproc231d.lib")
#  pragma comment(lib, "opencv_video231d.lib")
#  pragma comment(lib, "opencv_ml231d.lib")

#  pragma comment(lib, "opencv_calib3d231d.lib")
#  pragma comment(lib, "opencv_objdetect231d.lib")
#  pragma comment(lib, "opencv_features2d231d.lib")
#  pragma comment(lib, "opencv_contrib231d.lib")
#  pragma comment(lib, "opencv_ts231d.lib")
#  pragma comment(lib, "opencv_legacy231d.lib")
#  pragma comment(lib, "opencv_flann231d.lib")
#  pragma comment(lib, "opencv_gpu231d.lib")
# else
#  pragma comment(lib, "opencv_core231.lib")
#  pragma comment(lib, "opencv_highgui231.lib")
#  pragma comment(lib, "opencv_imgproc231.lib")
#  pragma comment(lib, "opencv_video231.lib")
#  pragma comment(lib, "opencv_ml231.lib")

#  pragma comment(lib, "opencv_calib3d231.lib")
#  pragma comment(lib, "opencv_objdetect231.lib")
#  pragma comment(lib, "opencv_features2d231.lib")
#  pragma comment(lib, "opencv_contrib231.lib")
#  pragma comment(lib, "opencv_ts231.lib")
#  pragma comment(lib, "opencv_legacy231.lib")
#  pragma comment(lib, "opencv_flann231.lib")
#  pragma comment(lib, "opencv_gpu231.lib")
# endif //#  if defined(_DEBUG)

# endif //# if CV_MAJOR_VERSION == 2 && CV_MINOR_VERSION == 3
#endif //#ifdef _MSC_VER

— обратите внимание, что Debug-версия программы, собранная с Release-версией библиотеки может иногда вести себя несколько странно ;)

Однако, при попытке запустить отладочную версию программы у вас скорее всего появится ошибка о том, что не найден файл tbb_debug.dll

TBB -Intel Threading Building Blocks (Intel TBB) — это кроссплатформенная библиотека шаблонов С++, разработанная компанией Intel для параллельного программирования и содержащая алгоритмы и структуры данных, позволяющие избежать сложностей, возникающих при использовании традиционных реализаций потоков
Сайт:
threadingbuildingblocks.org

3. решается это очень просто — скачиваем последний стабильный релиз библиотеки TBB для Windows.
Распаковываем архив и копируем с замещением все файлы из каталога bin\ia32\ в директорию C:\opencv\build\common\tbb\ (в числе прочих там будет и искомый tbb_debug.dll).

4. Пробуем :)
создадим пустой консольный проект, добавим в него cpp-файл, в который вставим кусок кода из пункта 2.4 и добавим код простой загрузки картинки через интерфейс C++:

int main()
{
	cv::Mat img = cv::imread("Image0.jpg");
	cv::imshow("img", img);
	cv::waitKey(0);
	return 0;
}

программируем :)

Установка OpenCV 2.3.1 под Linux идентична установке 2.2.0

PS следует отметить тот факт, что OpenCV (как и ROS) движется в сторону модульности и использования сторонних открытых библиотек (например, Eigen, TBB и т.п.)

Ссылки:
sourceforge.net/projects/opencvlibrary/
threadingbuildingblocks.org
en.wikipedia.org/wiki/Intel_Threading_Building_Blocks
  • +1
  • 30 декабря 2011, 08:11
  • noonv

Комментарии (21)

RSS свернуть / развернуть
+
0
OpenCV 2.3.1,MS VS 2008 SP1, WinXP SP3.
После установки и запуска первой программы всё время вылетала ошибка:
error PRJ0003: Error spawning 'cmd.exe'
Думал с системной переменной PATH что-то не так, но порывшись в интеренете нашёл решение:
Добавил три строчки в Visual Studio:
Tools -> Options -> Project and Solutions -> VC++ Directories:
$(SystemRoot)
$(SystemRoot)\System32
$(SystemRoot)\System32\wbem

Кстати говоря, одного этого руководства мне не хватило для понимания как сделать OpenCV работоспособным.
Я так и не понял из этой статьи что значит выполнить:
cmake . -G "Visual Studio 9 2008"

Тут странно написано и не конкретизированно:
— обратите внимание, что Debug-версия программы, собранная с Release-версией библиотеки может иногда вести себя несколько странно ;)

Информацию про *.lib и *d.lib взял из других источников.
Пример в конце статьи не работает, нет пояснений где должен находиться файл Image0.jpg, какие .h файлы необходимы.
Тем не менее, спасибо за статью. Читателей хочу обратить внимание на существование нативной документации (там тоже есть свои непонятные вещи, но в совокупности помогает):
wiki
tutorial (есть видео)
avatar

aurus

  • 5 января 2012, 13:11
+
0
Здравствуйте. У меня VS 2010 и OpenCV 2.3.1.
После настройки и конфигурации студии приведенный проект компилируется, но при запуске появляется исключение "
Необработанное исключение в «0x7c812afb» в «opencv5.exe»: Исключение Microsoft C++: cv::Exception по адресу 0x0011ed78..

При этом, само консольное приложение запущено и в нем пишется следующая ошибка:
OpenCV error: Bad flag (parameter or structure field) (Unrecognizeg or unsupported array type) in unknown function? file C:\slave\WinInstallerMegaPack\src\opencv\modules\core\src\array.cpp, line 2482…

Самое интересное, что при попытке запуска экзешника вне студии все работает.
В чем может быть проблема?
Еще приведу хорошую статью по настройке VS 2010 для OpenCV 2.3.1. Правда она на английском.
avatar

kevlar

  • 11 февраля 2012, 18:37
+
0
Проблема решилась добавлением файла картинки не только в папку «Debug» но и в подпапку проекта с тем же названием. В моем случае это
C:\Documents and Settings\Игорь\Мои документы\Visual Studio 2010\Projects\opencv5\opencv5
avatar

kevlar

  • 11 февраля 2012, 21:54
+
0
У меня тоже была такая проблемма, картинку во все директории подкладывал :)
avatar

aurus

  • 27 февраля 2012, 04:30
+
0
При запуске экзешника из студии текущей папкой является папка с файлами проекта, а при запуске вне студии текущей является папка с экзешником! Так что если в имени файла с картинкой не указать полного пути, например D:\Image0.jpg, то программа будет искать файл в соответствующей «текущей» папке.
avatar

Grunelf

  • 19 апреля 2012, 19:51
+
0
Здравствуйте, помогите пожалуйста, установил, прописал пути. При компилляции пишет ошибку
error C1083: Не удается открыть файл включение: opencv2/core/core_c.h: No such file or directory C:\OpenCV231\include\opencv2\opencv.hpp
При просмотре где возникает ошибка, показывает фаил opencv.hpp строчки
#include «opencv2/core/core_c.h»
#include «opencv2/core/core.hpp»
#include «opencv2/flann/miniflann.hpp»
#include «opencv2/imgproc/imgproc_c.h»
#include «opencv2/imgproc/imgproc.hpp»
#include «opencv2/video/video.hpp»
#include «opencv2/features2d/features2d.hpp»
#include «opencv2/objdetect/objdetect.hpp»
#include «opencv2/calib3d/calib3d.hpp»
#include «opencv2/ml/ml.hpp»
#include «opencv2/highgui/highgui_c.h»
#include «opencv2/highgui/highgui.hpp»
#include «opencv2/contrib/contrib.hpp»

данные файлы нашел в 2 папках:
C:\OpenCV231\include\include
и
C:\OpenCV231\build\include
если добавляю в каталоги включения любой из путей, получаю кучу ошибок
Ошибка 1 error C3862: cvRound: неуправляемую функцию невозможно компилировать с параметрами /clr:pure или /clr:safe C:\OpenCV231\include\include\opencv2\core\types_c.h 289 1 TS1
Ошибка 3 error C3861: _InterlockedExchangeAdd: идентификатор не найден C:\OpenCV231\include\include\opencv2\core\mat.hpp 115 1 TS1
Ошибка 4 error C3861: _InterlockedExchangeAdd: идентификатор не найден C:\OpenCV231\include\include\opencv2\core\mat.hpp 305 1 TS1
Ошибка 5 error C3861: _InterlockedExchangeAdd: идентификатор не найден C:\OpenCV231\include\include\opencv2\core\mat.hpp 377 1 TS1
Ошибка 6 error C3861: _InterlockedExchangeAdd: идентификатор не найден C:\OpenCV231\include\include\opencv2\core\mat.hpp 381 1 TS1
Ошибка 7 error C3861: _InterlockedExchangeAdd: идентификатор не найден C:\OpenCV231\include\include\opencv2\core\mat.hpp 2064 1 TS1
Ошибка 8 error C3861: _InterlockedExchangeAdd: идентификатор не найден C:\OpenCV231\include\include\opencv2\core\mat.hpp 2092 1 TS1
Ошибка 9 error C3861: _InterlockedExchangeAdd: идентификатор не найден C:\OpenCV231\include\include\opencv2\core\mat.hpp 2096 1 TS1
Ошибка 2 error C3645: cvRound: __clrcall невозможно использовать с функциями, скомпилированными в машинный код C:\OpenCV231\include\include\opencv2\core\types_c.h 289 1 TS1

по 1 ошибке жалуется на фаил types_c.h на строку
CV_INLINE int cvRound( double value )
остальные где встречается CV_XADD(refcount, 1); в модуле mat.hpp
и последняя CV_INLINE int cvRound( double value )в types_c.h

Не знаю что делать, бьюсь уже 2 день, пробовал разные способы усановки…
avatar

LEXX413

  • 13 февраля 2012, 14:43
+
0
попробуйте оставить только один путь до заголовочных файлов —
C:\OpenCV231\build\include
avatar

noonv

  • 13 февраля 2012, 14:48
+
0
то есть убрать эти?
C:\opencv\build\include\opencv
C:\opencv\build\include\
avatar

LEXX413

  • 13 февраля 2012, 14:49
+
0
у меня эти пути были такие
C:\OpenCV231\build\include\opencv
C:\OpenCV231\build\include\
к ним добавил
C:\OpenCV231\build\include

это было до вашего ответа.
После попробовал убрать пути
C:\OpenCV231\build\include\opencv
C:\OpenCV231\build\include\
остался только
C:\OpenCV231\build\include
Все осталось как прежде.
avatar

LEXX413

  • 13 февраля 2012, 14:55
+
0
Если хоть немного понимаешь английский, то рекомендую вот эту страничку Там довольно подробно все описано и со скриншотами. По ней я без проблем все настроил и у меня все скомпилировалось. К тому же там довольно интересный пример (для него требуется вэб камера). Если будут вопросы — пиши.
avatar

kevlar

  • 13 февраля 2012, 21:02
+
0
Спасибо, вроде получилось. Сейчас разбираюсь, правда камера не включается. Но сейчас покапаюсь что к чему.
avatar

LEXX413

  • 14 февраля 2012, 13:34
+
-1
У меня была проблема при выполнении программы. Выкидывало ошибку. Но потом оказалось, что просто была отключена камера в Диспетчере устройств. После включения все сразу заработало.
avatar

kevlar

  • 14 февраля 2012, 19:39
+
0
Пытаюсь разбить картинку на 3 канала:

#include "StdAfx.h"
cv::Mat img;

int main(void)
{
	img = cv::imread("C:\\cat2.jpg");
	std::vector<cv::Mat> planes;
	cv::split(img, planes);
	cv::imshow("Channel", planes[0]);
	cv::waitKey(0);
	return 0;
}

И получаю исключение при вызове функции split(). Из-за чего это?
Скриншот:
http://bsvi.ru/1230312eacbf3
avatar

nightmare

  • 23 марта 2012, 18:02
+
0
скорее всего — не удаётся считать картинку.
ЗЫ. для вопросов, напрямую не относящихся к тематике статей есть форум.
avatar

noonv

  • 24 марта 2012, 09:15
+
0
Странно, что пришлось перегружать Windows XP, я обходился без этого (XP+SP3). Вроде после смены любой из переменных среды нужно перезапускать все запущенные консольные приложения типа cmd.exe или FAR, возможно и Visual Studio, т.к. она тоже с переменными среды мудрит…
По поводу добавления путей в PATH — в Windows есть ограничение на длину переменной среды. Было дело — поставил программу, она дописала в конец PATH пути к себе и… отказалась нормально работать. Поэтому сейчас делаю так: создаю папку C:\tools, прописываю её в PATH, а в неё кидаю разные нужные dll-файлы (OpenCV, CUDA, TBB и т.д.) и разные полезные программки, которые не ребуют установки и состоят из 1 файла, например GNU make!
avatar

Grunelf

  • 19 апреля 2012, 20:06
+
0
Помогите, выдаёт ошибку «Запуск программы невозможен, так как на компьютере отсутствует opencv_core231d.dll „
avatar

Hot2771

  • 16 марта 2013, 13:03
+
0
opencv_core231d.dll существует, но ошибка все же
avatar

Hot2771

  • 16 марта 2013, 13:12
+
0
Во-первых, смотрим это видео:
www.youtube.com/watch?v=cgo0UitHfp8
Тут все наглядно и подробно описывается как и что подключить. Тут пример для 10-ой студии х32.
Однако работает также и для 2008 студии (брать папку vc9), и для x64, только для 2008 студии есть небольшой нюанс с C/C++ добавлением в настройке проекта — требуется сначала создать cpp файл, а только потом менять настройки.

Если при вставке кода со следующего пункта будет такая вот ошибка:
«Запуск программы невозможен, так как на компьютере отсутствует opencv_core231d.dll», то поступить можно так:
скопировать данную и все прочие требуемые dll файлы в папку Debug вашего проекта и попробовать запустить.
Если это не поможет, тогда в помощь вам утилиту ProcessMonitor, скачать с сайта sysinternals.com

Запустите ее, она прогрузит тучу строк, затем запустите студию и перед тем как запустить отладчик проекта, очистите ПроцМон, далее, запускаете отладчик, получаете ошибку, возвращаетесь в ПроцМон, останавливаете его (Capture) и по поиску ищите файл (в частности, opencv_core231d.dll), она покажет путь, в которых ищет его, (у меня высветилось штук 20, один из них — папка Debug моего проекта), заносим туда dll, в один из путей, где ругается, запускаем отладчик снова — должно сработать.
avatar

BlueBeard

  • 13 июня 2013, 19:48
+
0
Огромное спасибо за подробный мануал! Заработало с первого раза.
Один только вопрос, чисто из любопытства — а зачем «для удобства» указывать каталоги исходных файлов (Source Directories).
Я добавил, но во время отладки увидеть исходный код исполняемых функций openCV не получается. Я что-то не так делаю, или это вообще для другого предназначено?
Спасибо.
avatar

lolportal

  • 9 февраля 2014, 13:48
+
0
да — предназначено для навигации по исходникам библиотеки.
avatar

noonv

  • 10 февраля 2014, 06:37
+
0
Подскажите может кто сталкивался? Ставлю opencv2412 на visual c++, при компиляции выдает: «Запуск программы не возможен, тк на компьютере отсутствует MSVRCR120D.dll. Попробуйте переустановить программу». В Release ругается на MSVRCR110D.dll принудительно dll сувал в папки. VC++ пишет что dll загрузилось, но не помагает ошибка вылетает снова VC++ переставлял — не помогает.
avatar

r2d2

  • 13 апреля 2016, 08:14

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.