Я пытаюсь использовать 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