Установка opencv из командной строки (Windows) - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь использовать opencv в проекте, и у меня возникают проблемы с его установкой. Я извлек файлы opencv и создал небольшую тестовую программу:

#include "opencv2/highgui/highgui.hpp"
#include <iostream>

int main(int argc, char **argv){
    cv::Mat im=cv::imread((argc==2)? argv[1]: "testing.jpg",1);
    if (im.empty()){
        std::cout << "Cannot open image." << std::endl;
    } else {
        cv::imshow("image",im);
        cv::waitKey(0);
    }
    return 0;
}

Для компиляции программы я использовал следующую команду:

g++ -I"../../PortableGit/opt/opencv/build/include/" -L"../../PortableGit/opt/opencv/build/x64/vc15/lib" main.cpp -lopencv_core -lopencv_highgui -o main

Я получаю следующие ошибки:

In file included from ../../PortableGit/opt/opencv/build/include/opencv2/core.hpp:3293:0,
                 from ../../PortableGit/opt/opencv/build/include/opencv2/highgui.hpp:46,
                 from ../../PortableGit/opt/opencv/build/include/opencv2/highgui/highgui.hpp:48,
                 from main.cpp:1:
../../PortableGit/opt/opencv/build/include/opencv2/core/utility.hpp:714:14: error: 'recursive_mutex' in namespace 'std' does not name
 a type
 typedef std::recursive_mutex Mutex;
              ^~~~~~~~~~~~~~~
../../PortableGit/opt/opencv/build/include/opencv2/core/utility.hpp:715:25: error: 'Mutex' is not a member of 'cv'
 typedef std::lock_guard<cv::Mutex> AutoLock;
                         ^~
../../PortableGit/opt/opencv/build/include/opencv2/core/utility.hpp:715:25: error: 'Mutex' is not a member of 'cv'
../../PortableGit/opt/opencv/build/include/opencv2/core/utility.hpp:715:34: error: template argument 1 is invalid
 typedef std::lock_guard<cv::Mutex> AutoLock;

Я считаю, что это как-то связано с двоичными файлами mingw, которые больше не включены в opencv. Я скучаю по каталогу opencv/build/x86/mingw.

Мои вопросы:

  • Как мне «установить» opencv и использовать его без установки какой-либо IDE и / или CMake? (Я предпочитаю использовать vim и командную строку.)
  • После установки, какую команду я использую для компиляции и компоновки программы с opencv?

Любая помощь приветствуется.

Редактировать :

Это, похоже, проблема с реализацией G CC потоков в windows. Использование mingw-w64 вместо mingw устранило проблему std::recursive_mutex, но теперь компоновщик не может найти нужные файлы.

/i686-w64-mingw32/bin/ld.exe: cannot find -lopencv_core
/i686-w64-mingw32/bin/ld.exe: cannot find -lopencv_highgui

1 Ответ

0 голосов
/ 19 апреля 2020

После долгих попыток это то, что я получил на работу. Как ни странно, следование руководству LINUX по установке opencv работало лучше, чем руководство WINDOWS, хотя у меня есть компьютер windows.

Руководство по установке OpenCV на Windows Без VS

Heads-up: это многоступенчатый процесс, требуются 3 отдельных инструмента. Будьте готовы к тому, что это займет некоторое время.

Часть 1. Подготовьтесь:

  • Загрузить MinGW-w64 .
    • На странице загрузок выберите параметр «MinGW-w64-builds». Не нажимайте на опцию «win-builds».
    • MinGW-w64 builds option
    • Причина, по которой MinGW-w64 нужно использовать, заключается в том, что он более новая версия компилятора MinGW, улучшенная для windows. Это означает, что он поддерживает систему потоков posix, где стандартный компилятор MinGW поддерживает только систему потоков win32. OpenCV использует систему потоков posix, для чего требуется компилятор MinGW-w64.
    • Извлеките zip-папку MinGW-w64 в каталог. В моем случае это PortableGit/opt/MinGW-w64
    • На данный момент, вы можете добавить папку MingGW-w64/mingw32/bin в ваш путь. (Предполагая, что это не вызовет никаких конфликтов.) Если вы это сделаете, вам не нужно будет постоянно указывать исполняемый каталог g++ для его запуска. Это на ваше усмотрение.
  • Загрузите opencv release.
    • Не загружайте пакет для windows, нажмите кнопку, которая говорит "sources"
    • Sources, not the windows package
    • Извлеките zip-папку исходников opencv в каталог. В моем случае это PortableGit/opt/opencv-4.3.0
    • Также скачайте исходные файлы opencv_contrib непосредственно из хранилища .
    • Извлеките эту папку и поместите ее в папку opencv верхнего уровня : PortableGit/opt/opencv-4.3.0/opencv_contrib в моем случае.
  • Скачать CMake .
    • Я загрузил папку zip, но вы можете загрузить установщик, если вы sh.
    • Извлеките папку CMake zip, если вы ее загрузили, или запустите программу установки. Я поместил мою папку CMake здесь: PortableGit/opt/cmake-3.17.1-win32-x86
    • На данный момент, вы можете добавить папку cmake-3.17.1-win32-x86/bin в ваш путь. (Предполагая, что это не вызовет никаких конфликтов.) Если вы это сделаете, вам не нужно будет постоянно указывать исполняемый каталог cmake для его запуска. Это на ваше усмотрение.

Часть 2. Сборка OpenCV

  • Перейдите в каталог opencv и создайте папку build и компакт-диск внутрь.
    • mkdir build && cd build
  • Запустите следующие команды экспорта.
    • export CC=/PortableGit/MinGW-w64/mingw32/bin/gcc.exe
    • export CXX=/PortableGit/MinGW-w64/mingw32/bin/g++.exe
    • Это необходимо для того, чтобы следующая команда cmake использовала правильные компиляторы.
  • Запустите следующую команду cmake из этой папки: PortableGit/opt/cmake-3.17.1-win32-x86/cmake.exe -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DOPENCV_VS_VERSIONINFO_SKIP=1 -DOPENCV_EXTRA_MODULES_PATH="/PortableGit/opt/opencv-4.3.0/opencv_contrib/modules/" ..
    • Флаг -G указывает, что мы создаем файлы сборки для компилятора MinGW
    • -DCMAKE_BUILD_TYPE=Release указывает, что мы собирают версию выпуска opencv, а не версию отладки.
    • DOPENCV_EXTRA_MODULES_PATH необходимо установить в папку модулей внутри папки opencv_contrib. Для меня это было PortableGit/opt/opencv-4.3.0/opencv_contrib/modules
    • DOPENCV_VS_VERSIONINFO_SKIP указывает, что не включает информацию о версии. Если не установлен, компилятор выдаст ошибку с жалобой на отсутствие файлов версии. (Для справки показано ниже.)
gcc: error: long: No such file or directory
mingw32-make[2]: *** [modules\core\CMakeFiles\opencv_core.dir\build.make:1341:
modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj] Error 1
  • В случае успеха команда cmake завершится sh следующим образом:
    • Successfull build
  • Теперь выполните эту команду, снова из папки сборки: /PortableGit/opt/MinGW-w64/mingw32/bin/mingw32-make.exe -j7
    • mingw32-make.exe является эквивалентом windows Linux make команда.
    • Опция -j7 запускает процесс максимум с 7 потоками.
    • Это займет некоторое время! Мой ноутбук занял ~ 20 минут, чтобы завершить
    • Если команда make заканчивается ошибкой, обязательно сбросьте каталог сборки, прежде чем продолжить устранение неполадок. Это делается с помощью этой серии команд
rm -rf build
mkdir build
cd build

Часть 3. Использование OpenCV

  • Чтобы использовать библиотеку opencv, которую вы только что скомпилировали, в своем собственном проекте, скомпилируйте проект с этими флагами из главного каталога ваших проектов.
  • Помните, что теперь ваш компилятор должен быть настроен на компилятор mingw-w64 для поддержки opencv.
  • Я добавил отступы и переводы строки для удобства чтения, но при вводе этого в терминале сделайте не включает переводы строк и отступы.
  • Число в конце параметров компоновщика может изменяться в зависимости от версии загруженного вами opencv. Я скачал opencv-4.3.0, сделав свой номер 430, но у вас может быть другой номер.
PortableGit/opt/MinGW-w64/bin/g++.exe
    -I../../PortableGit/opt/opencv-4.3.0/include/
    -I../../PortableGit/opt/opencv-4.3.0/build/
    -I../../PortableGit/opt/opencv-4.3.0/modules/core/include/
    -I../../PortableGit/opt/opencv-4.3.0/modules/calib3d/include/
    -I../../PortableGit/opt/opencv-4.3.0/modules/dnn/include/
    -I../../PortableGit/opt/opencv-4.3.0/modules/features2d/include/
    -I../../PortableGit/opt/opencv-4.3.0/modules/flann/include/
    -I../../PortableGit/opt/opencv-4.3.0/modules/gapi/include/
    -I../../PortableGit/opt/opencv-4.3.0/modules/highgui/include/
    -I../../PortableGit/opt/opencv-4.3.0/modules/imgcodecs/include/
    -I../../PortableGit/opt/opencv-4.3.0/modules/imgproc/include/
    -I../../PortableGit/opt/opencv-4.3.0/modules/ml/include/
    -I../../PortableGit/opt/opencv-4.3.0/modules/objdetect/include/
    -I../../PortableGit/opt/opencv-4.3.0/modules/photo/include/
    -I../../PortableGit/opt/opencv-4.3.0/modules/stitching/include/
    -I../../PortableGit/opt/opencv-4.3.0/modules/ts/include/
    -I../../PortableGit/opt/opencv-4.3.0/modules/video/include/
    -I../../PortableGit/opt/opencv-4.3.0/modules/videoio/include/
    -I../../PortableGit/opt/opencv-4.3.0/modules/world/include/
    -L../../PortableGit/opt/opencv-4.3.0/build/lib/
    *.hpp
    *.cpp
    -lopencv_calib3d430
    -lopencv_core430
    -lopencv_dnn430
    -lopencv_features2d430
    -lopencv_flann430
    -lopencv_highgui430
    -lopencv_imgcodecs430
    -lopencv_imgproc430
    -lopencv_ml430
    -lopencv_objdetect430
    -lopencv_photo430
    -lopencv_stitching430
    -lopencv_video430
    -lopencv_videoio430
    -o
    main

Или вы можете скачать VS. Вам решать. Надеюсь, это поможет.

...