web-dev-qa-db-fra.com

compilation d'opencv en c ++

j'ai un fichier avec seulement importation:

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

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

using namespace cv;
using namespace std;

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

}

et j'essaye de compiler avec g ++ -I/usr/include/opencv -lopencv -lm m.cpp

mais obtenez une petite erreur:

Dans le fichier inclus depuis /usr/include/opencv/cxcore.hpp:46, depuis m.cpp: 5: /usr/include/opencv/cxmisc.h:214: erreur: constructeur, destructeur ou conversion de type attendu avant 'void' '/usr/include/opencv/cxmisc.h:220: erreur: constructeur attendu, destructeur ou conversion de type avant' int '/usr/include/opencv/cxmisc.h:226: erreur:' CV_INLINE 'ne nomme pas un type /usr/include/opencv/cxmisc.h:516: erreur: 'CV_DEPTH_MAX' n'a pas été déclaré dans cette étendue /usr/include/opencv/cxmisc.h:522: erreur: 'CV_DEPTH_MAX' n'a pas été déclaré dans cette étendue/usr/include/opencv/cxmisc.h: 522: erreur: 'CV_CN_MAX' n'a pas été déclaré dans cette étendue Dans le fichier inclus depuis m.cpp: 5: /usr/include/opencv/cxcore.hpp:70: erreur: déclaration de modèle de 'cv :: CV_EXPORTS cv :: Size_' /usr/include/opencv/cxcore.hpp:71: erreur: déclaration de modèle de 'cv :: CV_EXPORTS cv :: Point_' /usr/include/opencv/cxcore.hpp: 72: erreur: déclaration de modèle de 'cv :: CV_EXPORTS cv :: Rect_' /usr/include/opencv/cxcore.hpp:77: erreur: initialiseur attendu avant 'fromUtf16' /usr/include/opencv/cxcore.hpp:78: erreur: initialiseur attendu avant 'toUtf16' /usr/include/opencv/cxcore.hpp:80: erreur: initialiseur attendu avant 'format' /usr/include/opencv/cxcore.hpp:82: erreur: initialiseur attendu avant ':' token m.cpp: 38: erreur: '}' attendu à la fin de l'entrée

c'est mon contenu lib copencv:

alberto@zefiro:~$ 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

je suis sur ubuntu 10.10

20
nkint

Vous devez inclure correctement les en-têtes -I (majuscule i) et bibliothèques -l (L minuscule).

Sur les dernières versions d'OpenCV, vous devriez faire:

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

Et puis essayez de le compiler avec:

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

Remarque: si vous exécutez uniquement pkg-config --cflags --libs opencv dans la ligne de commande, vous verrez les chemins et les bibliothèques que vous devez inclure dans la ligne de commande g ++.

52
karlphillip

si votre environnement de développement n'a pas pkg-config et pour cette raison, la réponse acceptée par karlphilip n'est pas pratique, ou, vous devez connaître l'ensemble minimal de bibliothèques nécessaires pour lier votre application, puis en supposant du code tel que

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

int main()
{
    return 0;
}

vous pouvez ajouter des arguments de bibliothèque à partir de la liste suivante séquentiellement à partir du haut jusqu'à ce que vous trouviez l'ensemble minimal d'arguments dont vous avez besoin:

 -lopencv_core 
 -lopencv_imgproc 
 -lopencv_highgui 
 -lopencv_ml 
 -lopencv_video 
 -lopencv_features2d 
 -lopencv_calib3 .____.] -lopencv_objdetect 
 -lopencv_contrib 
 -lopencv_legacy 
 -lopencv_flann 

Par exemple, le code source C répertorié en haut de cet article se compile et se lie proprement avec uniquement

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

sur mon ancienne boîte x86_64 Ubuntu 12.04.

En supposant que le code C++ tel que

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

using namespace cv;
using namespace std;

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

alors vous compileriez et établiriez un lien avec

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

Je vous suggère d'utiliser CMake pour compiler OpenCV avec G++, cette façon est plus appropriée, je pense.

cmake_minimum_required(VERSION 3.1)
project(YOUR_PROJECT_NAME)

set(CMAKE_GXX_FLAGS "-Wall -Wextra -Wconversion  -pedantic -std=gnu11")

find_package(OpenCV REQUIRED)

include_directories(${OpenCV_INCLUDE_DIRS})

add_executable(YOUR_EXCUTABLE YOUR_CODE_SOURCE_FILES)
target_link_libraries(YOUR_EXCUTABLE ${OpenCV_LIBS})
2
SenDjasni
  1. Téléchargez les fichiers source dans le dossier OpenCV et le script install-opencv.sh .
  2. En exécutant le fichier de script, vous installez automatiquement les fichiers nécessaires pour opencv. Exécutez le code suivant:

    chmod +x install-opencv.sh
    ./install-opencv.sh
    

Si vous installez une version différente de la bibliothèque, veuillez mettre à jour la première ligne de version dans le script d'installation. Pour plus d'informations, utilisez this tutorial. Compilez-le avec la ligne suivante:

g++ `pkg-config --cflags opencv` example.cpp `pkg-config --libs opencv`
0
Giorgi Gvimradze