Компиляция opencv в С++ - программирование
Подтвердить что ты не робот

Компиляция opencv в С++

У меня есть файл с только импортом:

#include <iostream>
#include <stdio.h>

#include "cxcore.hpp"
#include "highgui.hpp"

using namespace cv;
using namespace std;

int main( int argc, char** argv )
{

}

и я пытаюсь скомпилировать с g++ -I/usr/include/opencv -lopencv -lm m.cpp

но получите ошибку whit:

В файле, включенном в /usr/include/opencv/cxcore.hpp:46,                  от m.cpp: 5: /usr/include/opencv/cxmisc.h:214: ошибка: ожидаемый конструктор, деструктор или преобразование типа до 'void /usr/include/opencv/cxmisc.h:220: ошибка: ожидаемый конструктор, деструктор или преобразование типа перед 'int /usr/include/opencv/cxmisc.h:226: ошибка: 'CV_INLINE не называет тип /usr/include/opencv/cxmisc.h:516: ошибка: 'CV_DEPTH_MAX не был объявлен в этой области /usr/include/opencv/cxmisc.h:522: ошибка: 'CV_DEPTH_MAX не был объявлен в этой области /usr/include/opencv/cxmisc.h:522: ошибка: 'CV_CN_MAX не был объявлен в этой области В файле, включенном в m.cpp: 5: /usr/include/opencv/cxcore.hpp:70: ошибка: объявление шаблона 'cv:: CV_EXPORTS cv:: Size_ /usr/include/opencv/cxcore.hpp:71: ошибка: объявление шаблона 'cv:: CV_EXPORTS cv:: Point_ /usr/include/opencv/cxcore.hpp:72: ошибка: объявление шаблона 'cv:: CV_EXPORTS cv:: Rect_ /usr/include/opencv/cxcore.hpp:77: ошибка: ожидаемый инициализатор до 'fromUtf16 /usr/include/opencv/cxcore.hpp:78: ошибка: ожидаемый инициализатор перед 'toUtf16 /usr/include/opencv/cxcore.hpp:80: ошибка: ожидаемый инициализатор до 'формата /usr/include/opencv/cxcore.hpp:82: ошибка: ожидаемый инициализатор перед ': токен m.cpp: 38: ошибка: ожидается '} в конце ввода

это мой контент copencv lib:

[email protected]:~$ ls /usr/include/opencv/
cvaux.h    cvcompat.h  cv.hpp        cvtypes.h  cvvidsurv.hpp  cxcore.h    cxerror.h  cxmat.hpp  cxoperations.hpp  highgui.h    ml.h
cvaux.hpp  cv.h        cvinternal.h  cvver.h    cvwimage.h     cxcore.hpp  cxflann.h  cxmisc.h   cxtypes.h         highgui.hpp

я на ubuntu 10.10

4b9b3361

Ответ 1

Вам нужно правильно включить заголовки -I (столица i) и библиотеки -l (строчные буквы L).

В новейших версиях OpenCV вы должны:

#include <cv.h>
#include <highgui.h>

И затем попытайтесь скомпилировать его с помощью:

g++ m.cpp -o app `pkg-config --cflags --libs opencv`

Примечание: если вы выполняете только pkg-config --cflags --libs opencv в командной строке, вы увидите пути и библиотеки, которые необходимо включить в командную строку g++.

Ответ 2

если ваша среда разработки не имеет pkg-config, и из-за этого принятый ответ karlphilip нецелесообразен, или вам нужно знать минимальный набор библиотеки, необходимые для связи вашего приложения, а затем с учетом кода, такого как

#include <cv.h>
#include <highgui.h>

int main()
{
    return 0;
}

вы можете добавлять аргументы библиотеки из следующего списка последовательно сверху, пока не найдете минимальный набор необходимых вам аргументов:

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

Например, исходный код C, указанный в верхней части этого сообщения, компилируется и содержит ссылки только с

gcc hello.c -o hello \
    -I /usr/include/opencv \
    -L /usr/lib \
    -lopencv_core \
    -lopencv_imgproc

в моем старом окне x86_64 Ubuntu 12.04.

Предполагая код на С++, например

#include "core/core.hpp"
#include "highgui/highgui.hpp"

using namespace cv;
using namespace std;

int main( int argc, char** argv )
{
    return 0;
}

тогда вы должны скомпилировать и связать с

g++ hello.cpp -o hello \
    -I /usr/include/opencv2 \
    -L /usr/lib \
    -lopencv_core \
    -lopencv_imgproc