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

TBBIntel Threading Building Blocks (Intel TBB) — это кроссплатформенная библиотека шаблонов С++, разработанная компанией Intel для параллельного программирования и содержащая алгоритмы и структуры данных, позволяющие избежать сложностей, возникающих при использовании традиционных реализаций потоков
Сайт:
http://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 и т.п.)

Ссылки
http://sourceforge.net/projects/opencvlibrary/
http://threadingbuildingblocks.org
http://en.wikipedia.org/wiki/Intel_Threading_Building_Blocks


21 комментарий на «“OpenCV — установка 2.3.1”»

  1. Здравствуйте. У меня 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. Правда она на английском.

    • Проблема решилась добавлением файла картинки не только в папку «Debug» но и в подпапку проекта с тем же названием. В моем случае это

      C:\Documents and Settings\Игорь\Мои документы\Visual Studio 2010\Projects\opencv5\opencv5

    • У меня тоже была такая проблемма, картинку во все директории подкладывал 🙂

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

  2. Здравствуйте, помогите пожалуйста, установил, прописал пути. При компилляции пишет ошибку
    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 день, пробовал разные способы усановки…

    • попробуйте оставить только один путь до заголовочных файлов —

      C:\OpenCV231\build\include
    • то есть убрать эти?
      C:\opencv\build\include\opencv
      C:\opencv\build\include\

    • у меня эти пути были такие
      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
      Все осталось как прежде.

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

    • Спасибо, вроде получилось. Сейчас разбираюсь, правда камера не включается. Но сейчас покапаюсь что к чему.

    • У меня была проблема при выполнении программы. Выкидывало ошибку. Но потом оказалось, что просто была отключена камера в Диспетчере устройств. После включения все сразу заработало.

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

    • Во-первых, смотрим это видео:
      http://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, в один из путей, где ругается, запускаем отладчик снова — должно сработать.

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

    • да — предназначено для навигации по исходникам библиотеки.

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

  6. 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 (есть видео)

  7. Пытаюсь разбить картинку на 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

    • скорее всего — не удаётся считать картинку.
      ЗЫ. для вопросов, напрямую не относящихся к тематике статей есть форум.

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение