Code blocks linux opencv

Pratyush’s Weblog

Confluence Of Technology and Open Source

Configure CodeBlocks to compile OpenCV codes

CodeBlocks is one of the IDE(s) that i prefer using due to its simplicity and fast interface. Plus the benefit of having MATLAB like command suggestions. The steps are outlined below:

  • Search the path where opencv is installed in your system.. you can do a :
  • in my system, this returns : /usr/local/include/opencv/cv.h. Copy the path till the opencv directory, i.e : /usr/local/include/opencv/
  • Now, open CodeBlocks > New Project > (any project type of your choice.. for starters, Console Project is a good beginning) . Now goto,

Project > Build Options > Linker Settings tab

  • Under “Other Linker options” add the following, one below the other:

-lopencv_core
-lopencv_highgui
-lopencv_contrib
-lopencv_ml
-lopencv_legacy
-lopencv_imgproc
-lopencv_video
-lopencv_features2d
-lopencv_calib3d
-lopencv_objdetect
-lopencv_flann

  • Now, in the same window, under “Search directories tab”, add the opencv directory you copied above, i.e. for my system, it’ll be :
  • Now, Project > Properties > C/C++ Parser options, again add the same directory path.

And you are done !! Enjoy compiling OpenCV codes in CodeBlocks 🙂

Источник

OPEN SOURCE REVOLUTION

Make your thoughts Open source. Share it.. probably you will learn more.

How to setup OpenCV 2.2 in Codeblocks

19 comments:

when I tried to build a file I had the following problem: undefined reference to ‘WinMain@16’
Do you know how can I fix it?

I have give it a try and it worked perfectly for me 🙂
open source development

@ab89xyzlucas Actly it Depends on the code ur compiling.. So cant say anything without that..

Sir ; I tried from example/square.c.
so it is work well. When I wait more time (5 min) ,it will give runtime error.
why.

@sanath Probably the program is flooding some of ur system’s memory..
Why do u want to wait for 5mins anyways 😉

I’m getting the error mentioned below.
«‘cvNameWindow’ was not declared in this scope».
Can some please help

hello, I have a problem when try compile my program with opencv library, is this
undefined reference to `cv::FileStorage::FileStorage(std::string const&, int)
and more but this is the first
please help me friend

Does your procedure is relevant for 64 bit environment user?

On sourceforge, we can download OpenCV-2.2.0-win32-vs2010.exe with pre-compiled 32-bit binaries
and it does not contain 64-bit binaries.

Ya it works fine with 64bit environment..

Hi,
How to install opencv 2.4.1 on codeblocks?

Yeah. I’d love a walk through for setting up code blocks and OpenCV 2.4.1.

I think I got it to work, but I always get libgcc_s_dw2-1.dll missing errors at run time.

Hi..
What do you mean by setting environment variable PATH when installing opencv ?

Its true; every time a new version of OpenCv is released. The content changes. In V2.4.2 the installation process does not add folders to the PATH variable. The OpenCV Wiki for CodeBlocks is no longer valid. Lastely, the libraries that come with the OpenCV package are for Visual Studio only, and must be rebuilt for the (IDE, I guess). Its not clear how to do this.

yes it work fine i tried it . Really it is working.

Yes it is working very well.Thank you for sharing this post.

Hello Adithya, thanks for sharing useful information.

Yes it is working very well.Thank you for sharing this post.

Thank you for sharing Social Book marketing website list. Freelance To India also providing Social Media Marketing services.

Источник

Runtime errors when coding OpenCV programs using codeBlocks in linux

When I try to compile a C++ program which uses the openCV library in CodeBlocks it gives me a runtime error :

This is in spite of the fact that I have added all the required libraries using linker settings for the Code Blocks IDE (including the one named libopencv_calib3d.so.2.2 which is a symbolic link).

However I’m able to compile the program using the command line by issuing the command :

Can somebody advise me on how I can get to run the same using Code Blocks.

2 Answers 2

The file libopencv_calib3d.so.2.2 is part of OpenCV 2.2. There is, however, no libcv, libhighgui or libcvaux part of OpenCV 2.2. This means that your g++ call links against another version of OpenCV.

To link against OpenCV 2.2, you would need flags like -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann .

You should also not put them in manually, but instead use

I would recommend installing a reasonably up-to-date version of OpenCV for Linux, 2.4.9 for example, at this time of writing, appears to build with the current version of gcc that I have (4.8.2). There are a few steps you need to complete in order to get a simple OpenCV example up and running in Code::Blocks. The OpenCV documentation tells you to create a build directory within your OpenCV root directory and run cmake, make, sudo make install etc in order to generate the libraries your project may need to link to, including the libopencv_calib3d.so you mention:

This blog posting gives explanations on how to install OpenCV and configure it’s use for Code::Blocks in Ubuntu Linux environments:

Источник

Установка OpenCV в Windows для чайников и подключение библиотеки в Code Blocks

Данная статья будет полезна чайникам новичкам в программировании, которые хотят начать изучать техническое зрение при помощи библиотеки OpenCV с полного нуля. Если Вы пользователь Windows и даже не знаете, что значит «прилинковать библиотеку», и при этом Вы мечтаете поглубже изучить работу OpenCV и программирование «под железо», перейти на кроссплатформенное ПО, пойти по пути тру специалиста, то Вам сюда. В статье будут приведены подробные инструкции с картинками, так что не понять, что к чему, будет просто невозможно!

Краткий экскурс по содержанию. Если Вы в первый раз слышите про всё, что написано ниже, то просто читайте и изучайте статью по порядку. Если же Вы что-то уже знаете, можете пропустить данный пункт в статье.

  1. Как пользоваться командной строкой
    Всё про необходимый набор команд для сборки OpenCV.
  2. Компилятор GCC
    Немного о том, как найти нужную Вам сборку GCС и предостережение о возможных ошибках, а также немного про некоторые встроенные в GCC библиотеки для распараллеливания процессов на CPU и GPU.
  3. Установка компилятора
    Вы узнаете, как прописывать переменные среды PATH, и какие проблемы могут возникнуть при установке компилятора.
  4. CMake
    Немного про Cmake.
  5. OpenCV
    Вы узнаете, где скачать, и как подготовить к установке OpenCV, а также немного про саму библиотеку.
  6. Как пользоваться CMake
    Вы узнаете, как настроить компилятор в Cmake и указать пути к библиотеке и к сборке.
  7. Настраиваем сборку OpenCV в Cmake
    Вы узнаете про некоторые опции сборки OpenCV, для настройки его под свои нужды.
  8. Code::Blocks
    Немного о Code::Blocks. Создание примера проекта.
  9. Проблемы с Code::Blocks
    Какие бывают глюки при работе с Code::Blocks.
  10. Подключение OpenCV в Code Blocks
    Вся необходимая и подробная информация, чтобы подключить библиотеку OpenCV к Вашему проекту.
  11. Ошибки во время компиляции программы с библиотекой OpenCV
    Здесь приводится порядок подключения файлов библиотек OpenCV, а также рассматриваются ошибки из-за отсутствия необходимых для работы OpenCV библиотек.
  12. Заключение
Читайте также:  Mac os anaconda path

Как пользоваться командной строкой

Если в Linux командная строка является неотъемлемой частью операционной системы, то в Windows она почти никогда не нужна. Однако мы ведь хотим стать тру специалистами и научиться программировать под любое железо в любой ОС, писать программы в блокноте и т.д.? Поэтому начнем с командной строки, хотя она будет нужна нам всего лишь для двух команд — mingw32-make и mingw32-make install, но об этом позже. Если Вы уже в курсе, как пользоваться командной строкой, то можете пропустить данный пункт. В противном случае смотрим под спойлер.

Итак, сначала запустим командную строку. Зайдем в ПУСК и в поиске введем cmd. Что поиск найдет, то и запускаем. Должно появиться такое вот окошко:

Чтобы перейти на диск D: нужно набрать команду cd /d D:, как на картинке.

Дальше попробуем перейти в папку ( в примере это папка YAR ). Команда cd может нам в этом помочь. В моем случае надо просто набрать cd YAR и нажать клавишу Enter, как на картинке.

Если же нужно вернуться назад, достаточно набрать команду cd .., и Вы окажетесь в предыдущей папке. Также часто удобно использовать клавишу Tab, чтобы командная строка перечисляла имена папок, начинающихся на тот символ, который Вы напечатали после команды cd, как например на этой анимации.

Командная строка показывает лишь две папки на букву ‘o’, так как в папке YAR есть лишь две такие папки.

Это минимальный набор команд для перемещения в файловой системе, который нам необходимо знать. Запомните их, cd /d перемещает на указанный диск, cd перемещает в указанную папку, а команда cd .. возвращает нас назад.

Существует хороший, бесплатный и открытый компилятор — GCC. Для Windows есть коллекция бесплатных виндоусовских компиляторов для C и C++MinGW. Другие компиляторы я не использовал, поэтому в данной статье не затрагиваю.

Итак, компилятор значит GCC, гуглим MinGW, однако не спешите тут же скачивать что попало. Сначала надо уловить пару тонкостей, так как мы же сидим под Windows. Во-первых, если Вы скачаете первое, что попадется под руку, пусть и последнюю сборку компилятора, в дальнейшем Вас может ждать разочарование, когда во время сборки библиотеки OpenCV выскочит ошибка вроде этой:

Обратим внимание на строку: error: ‘thread’ in namespace ‘std’ does not name a type std::thread second_workthread; Эта ошибка говорит о том, что в стандартной библиотеке std нет класса thread, и это несмотря на то, что std стандартная библиотека, и класс thread в ней должен быть обязателен в С++ 11, и компилятор MinGW у Вас версии 6. Дело в том, что во многих сборках MinGW под Windows не поддерживается работа с потоками через std::thread. Поэтому надо найти сборку MinGW (или собрать MinGW самому) с рабочим классом std::thread. В том числе поэтому нельзя использовать TDM GCC. По-другому эту проблему не решить.

Если Вас устроит версия MinGW 5.1, то советую скачать ее тут, с помощью этого набора компиляторов я удачно собрал OpenCV на Windows 10.

Если Вас интересует, как можно распараллелить процессы между ядрами процессора или видеокарты с помощью библиотек OpenMP, OpenACC, то стоит прочитать об этом под спойлером.

А если пока лень во всё вникать, просто качайте компилятор по ссылке, распакуйте архив, переместите содержимое архива, куда Вам нужно, и следуйте инструкции дальше.

После того, как Вы скачаете MinGW, надо будет провести пару нехитрых манипуляций с ним — прописать папку bin в переменную среды PATH. Это нужно для того, чтобы из командной строки можно было воспользоваться командой make или mingw32-make, иначе Вас будет ждать такое сообщение: «mingw32-make» не является внутренней или внешней командой, исполняемой программой или пакетным файлом. Также в папке bin расположены динамические библиотеки для работы компилятора, которые windows попросту не увидит, если Вы не пропишите путь к папке bin в переменную среды PATH.

Итак, чтобы прописать путь к папке с компиляторами в переменную среды PATH, идем сначала в ПУСК, затем тыкаем в Этот компьютер и заходим в свойства. Там нажимаем Дополнительные параметры системы, находим и жмем переменные среды и затем, или в окне переменные среды пользователя (если Вы делаете эту переменную только для себя), или в окне системные переменные (если Вы делаете переменную для всех пользователей Windows) находим переменную PATH (или Path) и в нее дописываем Ваш путь до папки bin. Например, как в моем случае C:\MinGW\mingw64\bin. Путь прописываем после символа ‘;’. Если у Вас в списке переменных нет PATH, то можете создать её, и тогда в ней будет пока один единственный путь — путь до Вашего компилятора GCC. Не забудьте переместить MinGW в удобную для Вас папку, прежде чем прописывать путь до папки bin. Также не забудьте перезапустить командную строку (если Вы её уже запустили) после добавления в PATH папки bin Вашего MinGW.

Cmake полезная штука, это кроcсплатформенная утилита для автоматической сборки программы из исходного кода. Она нам будет нужна, чтобы подготовить OpenCV к сборке. Качаем Cmake, если у Вас 64-разрядная система, качаем архив cmake-3.7.1-win64-x64.zip. Когда архив будет скачен, распакуйте его куда Вам удобнее. Cmake можно пользоваться через GUI. Для этого в папке с Cmake заходим в папку bin и нажимаем cmake-gui.exe. Теперь на время отложим Cmake и займемся OpenCV.

Если Вы читаете данную статью, то скорее всего уже знаете, зачем нужен OpenCV, и на что эта библиотека способна. Остальные могут посмотреть это видео и почитать тут. Для установки OpenCV нам надо скачать два архива. Один архив непосредственно с самой библиотекой OpenCV, а второй архив — дополнительные модули для библиотеки OpenCV. Каждый модуль ответственен за что-то свое, например, bioinspired модуль содержит в себе модель сетчатки глаза и может быть применен для детектора движения или для выравнивания яркости на изображении. Некоторые модули идут в составе архива с библиотекой OpenCV.

Итак, гуглим extra modules, чтобы найти модули для OpenCV. Если лень искать, можете скачать тут.

Затем гуглим саму библиотеку OpenCV, скачать ее можно тут и тут (во втором случае выберете OpenCV for Linux/Mac, так как версия для Windows рассчитана на Visual Studio). На момент написания статьи последняя версия OpenCV 3.2.0.

Читайте также:  Установка blender для linux

После того, как скачали два архива, распакуйте их и переместите содержимое, куда Вам удобно. Зайдите в папку OpenCV и создайте там папку build (или назовите ее как угодно, это просто папка, куда будет собираться OpenCV). И вот теперь можно начать работать с Cmake.

Как пользоваться Cmake

В окне Cmake нажимаем Browse Source и выбираем папку, где находятся файлы библиотеки OpenCV. Затем нажимаем Browse Build и выбираем папку build, которую ранее создали внутри папки с библиотекой OpenCV. В итоге должно получиться примерно, как на этой картинке.

Затем нажимаем кнопку Configure, должно появиться окошко, где можно настроить, под что именно Вы хотите собрать библиотеку.

Где написано Specify the generator for this project оставьте без изменений, строка MinGW Makefiles будет говорить о том, что Cmake соберет библиотеку с файлом инструкции для программы make под компиляторы MinGW. О том, что такое Makefiles можно почитать тут, а как этим пользоваться, тут. Впрочем, пока не надо на это распыляться, продолжаем установку OpenCV. Выберите пункт Specify native compilers, затем нажмите кнопку Next.

Дальше в новом окне выбираем компиляторы для языка C и С++. Эти компиляторы находятся в папке bin набора компиляторов MinGW. Для языка C прописываем путь до программы в папке bin, что заканчивается на mingw32-gcc.exe, а для языка C++ — путь до программы, что заканчивается на mingw32-g++.exe, язык Fortan не трогаем. В моем случае в папке bin есть такие программы компиляторов x86_64-w64-mingw32-gcc.exe и x86_64-w64-mingw32-g++.exe, их я и указал. Если вы забудете, что именно нужно указывать в этих пунктах, можно подсмотреть в настройках компилятора Code::Blocks (Если Вы скачали его со встроенным компилятором MinGW). Для этого в программе Code::Blocks заходим в Settings, выбираем пункт Compiler, заходим в Toolchain executables. В закладке Program Files на строчках C Compiler и C++ Compiler указаны компиляторы для языка C и C++.

Жмем в настройках компиляторов Cmake кнопку Finish и…

Это означает, что библиотека OpenCV слишком сложная для обывателя, и зря мы вообще начали ее устанавливать. Чтобы ею пользоваться, надо сначала получить академические корочки и изучать программирование лет 10-20, и вообще технический прогресс уже слишком далеко ушел, и никакие DIY проекты за ним не угонятся… Короче, бросьте это дело, не для Вас это.

Шучу. Ошибка скорее всего вызвана тем, что Windows не видит dll библиотеки компилятора, несмотря на то, что мы прописали папку bin в PATH. Поэтому идем в папку bin и копируем все dll файлы, а затем вставляем в папку system32, которая находится в папке Windows на диске C:. В моем случае таких dll файлов было много.

Теперь снова жмем кнопку Cmake’a Configure и процесс должен пойти успешно. В конце получим такую вот картину:

Настраиваем сборку OpenCV в Cmake

Как Вы видите, есть много опций. Затронем некоторые важные из них. Начнем с внешних модулей OpenCV. Ищем в Cmake опцию OPENCV_EXTRA_MODULES_PATHCmake есть поиск, в котором удобно искать интересующую Вас опцию) и прописываем там путь до внешних модулей, которые мы скачали отдельным архивом opencv_contrib-master.zip. В моем случае путь выглядит так: D:\YAR\_repoz\opencv_contrib-master\opencv_contrib-master\modules.

Рассмотрим флаги, например, BUILD_EXAMPLES включает постройку примеров, можно поставить галочку. BUILD_SHARED_LIBS (по умолчанию стоит галочка) указывает, строить динамические библиотеки или статические. Статические библиотеки будут вшиты в программный код Вашей программы, поэтому ее будет легче переносить с одного компьютера на другой, однако при этом программа будет больше весить. Динамические библиотеки могут использовать все Ваши программы, однако на другом компьютере их может не быть, если OpenCV не будет установлен. WITH_TBB включает использование библиотеки Intel Threading Building Blocks, если у Вас она на компьютере установлена, можете включить эту опцию (однако стоит заметить, что Cmake включает некоторые опции сам, если на компьютере обнаружено необходимое ПО). WITH_CUDA включает использование CUDA для работы с GPU (на компьютере должен быть установлен CUDA). CMAKE_BUILD_TYPE может иметь два состояния, Debug и Release, выберете тип сборки, какой Вам необходим.

После того, как Вы определитесь со всеми опциями, жмем снова кнопку Configure. После того, как Cmake закончит, жмем кнопку Generate. Если все прошло без ошибок, теперь дело стоит за командной строкой. Итак, открываем командную строку и переходим в папку build. Пишем в командной строке mingw32-make и жмем Enter. Должно получиться примерно такое:

Сборка OpenCV началась, теперь надо подождать… Можете пока сходить попить чаю или посмотреть, как хакнуть время.

Если на экране командной строки нет никаких ошибок, и сборка дошла до 100%, то можно написать команду mingw32-make install.

Когда установка OpenCV будет закончена, в папке build или в папке install в папке build должны появиться все необходимые файлы.

В папке include будут размещены все заголовочные .hpp и .h файлы, которые вы будете подключать в своем коде. Далее в папке lib или в моем случае opencv-3.2.0\build\install\x64\mingw\staticlib находятся все библиотеки OpenCV. В моем случае это статичные библиотеки .a. Также здесь должен быть файл, в котором можно посмотреть на порядок подключения этих библиотек, например, файл OpenCVModules.cmake. Если его открыть, можно найти там следующее:

Видите zlib libtiff libjpeg libwebp и т.д., это библиотеки, только тут они перечислены в правильном порядке. Если Вы их подключите не в том порядке, в котором их будет проверять компилятор, то возникнут ошибки, но об этом позже.

В директории opencv-3.2.0\build\install\x64\mingw\bin находятся программы для обучения каскада HAAR’a, которые могут пригодиться в будущем, чтобы обучить детектор OpenCV на интересующие Вас объекты, а тут opencv-3.2.0\build\install\etc\haarcascades находятся уже обученные каскады.

Code::Blocks
Кажется, я говорил, что тру специалист может кодить в блокноте, но пока мы остановимся на среде разработки Code::Blocks. Это свободная кроссплатформенная среда разработки, т.е. Вы сможете пользоваться средой разработки как под Windows, так и под Linux. В данной статье подключение OpenCV будет именно в этой среде разработки. Если Вы еще не знакомы с данной средой для программирования, для Вас есть немного информации под спойлером.

Скачайте последнюю версию, можно со встроенным компилятором MinGW, для этого скачайте по ссылкам codeblocks-16.01mingw-setup.exe тут. После установки Code::Blocks попробуйте создать тестовый проект. Для этого выполняем действия в такой последовательности: File -> New -> Project. , выбираем Console Application и жмем Go, выбираем компилятор C++ или C, пишем имя проекта, нажимаем Finish. Чтобы посмотреть файл main программы, нажимаем слева на крестик возле надписи Sources внутри окна Management в закладке Projects. Выбрав файл main, можно посмотреть его содержимое, там должно быть что-то вроде этого (для языка C++):

Наверху в среде разработки есть иконка с желтой шестеренкой, нажмите на нее, чтобы скомпилировать программу. Затем нажмите на иконку, похожую на кнопку Play, и программа запустится. Все вышеперечисленные действия можно посмотреть в виде анимации ниже.

Читайте также:  Windows слишком длинные имена файлов

Проблемы с Code::Blocks

Иногда запущенную программу не получается закрыть. Чаще всего это бывает, если сделать завершение работы программы через среду разработки, нажав иконку Abort. В этом случае зайдите в диспетчер задач и посмотрите процессы. Снимите задачу, которая является Вашей программой.

Также бывает, что после подключения заголовочных файлов Code::Blocks начинает жутко тормозить. Эту проблему можно решить, убрав галочку в пункте Update parser when typing (on save otherwise) в настройках среды разработки (Settings → Editor… → Code completion).

Подключение OpenCV в Code Blocks

И вот настал долгожданный момент. OpenCV можно подключить как к конкретному проекту, так и в глобальных настройках среды программирования Code Blocks, чтобы потом не возиться с настройками для каждого проекта с OpenCV в отдельности. Оба варианта реализуются почти одинаково. Итак, сначала подключим библиотеки. Хочу напомнить, что, если Вы собрали OpenCV с использованием динамических библиотек, то файлы с расширением dll (которые Вы должны найти где-то в папке с собранной библиотекой) нужно переместить или в папку с Вашей программой (кинуть их в папку с проектом Code Blocks) или скопировать их в папку операционной системы system32. Хотя по идее все должно работать, если эти файлы будут находиться в одном из путей, прописанных в PATH. В противном случае Ваша программа скомпилируется, но при запуске выдаст ошибку. В моем случае OpenCV собрана с использованием статических библиотек.

Итак, сначала подключим библиотеки. Заходим в настройки компилятора (Settings → Compiler… → Global Compiler Settings → Linker Settings) и добавляем туда все файлы библиотек (в моем случае эти файлы находятся тут opencv-3.2.0\opencv-3.2.0\build\install\x64\mingw\staticlib). Далее идем в настройки Search directories и во вкладке Compiler и Linker прописываем пути до папок с заголовочными файлами OpenCV. В моем случае эти пути такие: D:\YAR\_repoz\opencv-3.2.0\opencv-3.2.0\build\install\include (обязательно!), D:\YAR\_repoz\opencv-3.2.0\opencv-3.2.0\build\install\include\opencv2 и D:\YAR\_repoz\opencv-3.2.0\opencv-3.2.0\build\install\include\opencv для удобства подключение заголовочных файлов (чтобы вместо #include «opencv2\cv.hpp» писать сразу #include );

Для OpenCV версии 2.0 на данном этапе (скорее всего) всё было бы уже готово. Однако для версии 3.1 и 3.2 при попытке скомпилировать программу появится ошибка. Попробуйте запустить эту программу:

После неудачной попытки ее скомпилировать может появится, например, такая ошибка:

Это означает, что техническое зрение — очень сложное направление, и зря Вы решили этим заняться. В мире есть много других профессий, где не надо разбираться в программировании и, тем более, в техническом зрении. В области IT уже все давно придумали за Вас, и нет смысла пытаться что-то сделать самому, и, уж тем более, лезть в стартапы. Осталось лишь принять тот факт, что Вы обречены остаться всего лишь потребителем высоких технологий до конца своих дней… Шучу, конечно!

Ошибки во время компиляции программы с библиотекой OpenCV

Итак, разберемся в ошибках.

undefined reference to `GOMP_parallel’

Из лога ошибки видно, что проблема кроется в файле libopencv_core320 библиотеки OpenCV, компилятор не знает, что такое GOMP_parallel. Подобные ошибки обычно означают то, что некая библиотека не была подключена. В данном случае эта библиотека OpenMP, о которой я говорил в начале статьи, когда писал про компилятор GCC. Подключим её и посмотрим дальше. О том, как подключить OpenMP в проект, Вы можете прочитать тут.

Теперь при попытке скомпилировать могут снова возникнуть ошибки, например, такие:

Важная информация из лога ошибки

Из этого лога видно, что проблема в библиотеке GDI, которая позволяет приложениям использовать графику и форматированный текст на мониторе и принтере. Добавим ее точно так же, как предыдущую библиотеку.

Еще одна ошибка, наверное, самая важная.

В логах видно, что имеет место быть какая-то библиотека Imf, например, undefined reference to Imf::Chromaticities::Chromaticities. Однако эта библиотека уже есть в составе OpenCV, да и к тому же мы её уже подключили!

Дело в том, что компилятор проверяет библиотеки в среде Windows, начиная с конца того списка библиотек, которые мы добавили. И как видно на картинке, файл libIlmImf.a находится в начале, и в итоге компилятор находит сначала библиотеку, в которой используются функции из файла libIlmImf.a, а затем находит файл libIlmImf.a, но уже поздно — он уже сообщил, что есть ошибка. Этот вопрос разрешается просто — нужно привести наш список библиотечных файлов в правильный порядок. Делается это кнопками «вверх» и «вниз», которые я отметил на картинке.

Порядок подключения библиотек можно найти в файлах .cmake в папке с библиотеками OpenCV, об этом я уже писал в данной статье выше. Приведу порядок подключения для OpenCV 3.2

Так порядок подключения выглядит в Code Blocks:


А вот список, который в Code Blocks придется заполнять снизу вверх.

zlib
libtiff
libjpeg
libwebp
libjasper
libpng
IlmImf
opencv_core
opencv_flann
opencv_imgproc
opencv_ml
opencv_photo
opencv_reg
opencv_surface_matching
opencv_video
libprotobuf
opencv_dnn
opencv_fuzzy
opencv_imgcodecs
opencv_shape
opencv_videoio
opencv_highgui
opencv_objdetect
opencv_plot
opencv_superres
opencv_xobjdetect
opencv_xphoto
opencv_bgsegm
opencv_bioinspired
opencv_dpm
opencv_face
opencv_features2d
opencv_line_descriptor
opencv_saliency
opencv_text
opencv_calib3d
opencv_ccalib
opencv_datasets
opencv_rgbd
opencv_stereo
opencv_tracking
opencv_videostab
opencv_xfeatures2d
opencv_ximgproc
opencv_aruco
opencv_optflow
opencv_phase_unwrapping
opencv_stitching
opencv_structured_light

Еще одна возможная ошибка:

Она разрешается добавлением библиотеки Comdlg32. Для этого просто добавьте Comdlg32 в Linker Settnigs.

Теперь, если во время компиляции программы ошибок не возникло, можно запустить программу. Если Вы использовали пример программы из моей статьи, должно получиться что-то вроде этого:

Update
Уже после написания данной статьи я обнаружил еще пару ошибок типа undefined reference to. Ниже приведены списки ошибок и библиотеки, которые необходимо добавить чтобы исправить ситуацию.

Отсутствие подключенной библиотеки Ole32 вызывает следующие ошибки:
undefined reference to `__imp_CoTaskMemFree’
undefined reference to `__imp_CoCreateInstance’
undefined reference to `__imp_CoCreateInstance’

Отсутствие подключенной библиотеки OleAut32 вызывает следующую ошибку:
undefined reference to `__imp_OleCreatePropertyFrame’

Отсутствие подключенной библиотеки uuid вызывает следующие ошибки:
undefined reference to `IID_IPersistStream’
undefined reference to `IID_IUnknown’
undefined reference to `IID_ISpecifyPropertyPages’
undefined reference to `IID_IPropertyBag’

Отсутствие подключенной библиотеки Vfw32 или Avifil32 вызывает следующие ошибки:
undefined reference to `AVIStreamRelease’
undefined reference to `AVIFileRelease’
undefined reference to `AVIFileOpenA’
undefined reference to `AVIFileCreateStreamA’
undefined reference to `AVISaveOptions’
undefined reference to `AVIMakeCompressedStream’
undefined reference to `AVIStreamSetFormat’
undefined reference to `AVIStreamWrite’

Не забудьте подключить их в своем Code::Blocks!

Update: не работает чтение avi файла
Если при использовании cv::VideoCapture возникли проблемы, а именно OpenCV не хочет открывать видео файлы, то вам просто необходимо скопировать в папку со своей программой dll библиотеку opencv_ffmpeg (в моем случае она называется opencv_ffmpeg320_64.dll, версия opencv 3.2, находилась тут: opencv-3.2.0\build\install\x64\mingw\bin).

Установка OpenCV для новичка может показаться очень сложным занятием, так как вероятность столкнуться с ошибками велика, а знаний, чтобы понять что к чему еще не так много. Надеюсь, данная статья поможет всем, кто только начинает программировать, и сэкономит Вам пару дней или недель поисков в интернете. И напоследок. Может быть, Вы задаетесь вопросом, сколько же нужно времени, чтобы стать тру специалистом? Ответ на этот вопрос есть под спойлером.

Источник

Оцените статью