Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

compiling opencv in c++

i have a file with only import:

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

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

using namespace cv;
using namespace std;

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

}

and i try to compile with g++ -I/usr/include/opencv -lopencv -lm m.cpp

but get whit error:

In file included from /usr/include/opencv/cxcore.hpp:46, from m.cpp:5: /usr/include/opencv/cxmisc.h:214: error: expected constructor, destructor, or type conversion before ‘void’ /usr/include/opencv/cxmisc.h:220: error: expected constructor, destructor, or type conversion before ‘int’ /usr/include/opencv/cxmisc.h:226: error: ‘CV_INLINE’ does not name a type /usr/include/opencv/cxmisc.h:516: error: ‘CV_DEPTH_MAX’ was not declared in this scope /usr/include/opencv/cxmisc.h:522: error: ‘CV_DEPTH_MAX’ was not declared in this scope /usr/include/opencv/cxmisc.h:522: error: ‘CV_CN_MAX’ was not declared in this scope In file included from m.cpp:5: /usr/include/opencv/cxcore.hpp:70: error: template declaration of ‘cv::CV_EXPORTS cv::Size_’ /usr/include/opencv/cxcore.hpp:71: error: template declaration of ‘cv::CV_EXPORTS cv::Point_’ /usr/include/opencv/cxcore.hpp:72: error: template declaration of ‘cv::CV_EXPORTS cv::Rect_’ /usr/include/opencv/cxcore.hpp:77: error: expected initializer before ‘fromUtf16’ /usr/include/opencv/cxcore.hpp:78: error: expected initializer before ‘toUtf16’ /usr/include/opencv/cxcore.hpp:80: error: expected initializer before ‘format’ /usr/include/opencv/cxcore.hpp:82: error: expected initializer before ‘:’ token m.cpp:38: error: expected ‘}’ at end of input

this is my copencv lib content:

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

i'm on ubuntu 10.10

like image 711
nkint Avatar asked Feb 01 '12 11:02

nkint


People also ask

Is CMake necessary for OpenCV?

It's not required to compile OpenCV if you don't need the latest version of OpenCV. Please note that some parts of this procedure are slightly outdated but still you will find your way to the successful installation of the library.


4 Answers

You need to properly include the headers -I (capital i) and libraries -l (lowercase L).

On the newest OpenCV versions you should do:

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

And then try to compile it with:

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

Note: if you execute only pkg-config --cflags --libs opencv in the command line you will see the paths and libraries you need to include in the g++ command line.

like image 135
karlphillip Avatar answered Oct 04 '22 00:10

karlphillip


if your development environment does not have pkg-config and because of this the accepted answer by karlphilip is not practical, or, you need to know the minimal set of libraries required to link your application, then assuming code such as

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

int main()
{
    return 0;
}

you can add library arguments from the following list sequentially from the top until you find the minimal set of arguments that you need:

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

For example, the C source code listed at the top of this post compiles and links cleanly with only

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

on my old x86_64 Ubuntu 12.04 box.

Assuming C++ code such as

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

using namespace cv;
using namespace std;

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

then you would compile and link with

g++ hello.cpp -o hello \
    -I /usr/include/opencv2 \
    -L /usr/lib \
    -lopencv_core \
    -lopencv_imgproc
like image 41
Jonathan Ben-Avraham Avatar answered Oct 04 '22 02:10

Jonathan Ben-Avraham


I suggest you use CMake to compile OpenCV with G++, this way is more suitable, I think.

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})
like image 4
asendjasni Avatar answered Oct 04 '22 00:10

asendjasni


  1. Download source files in OpenCV folder and install-opencv.sh script.
  2. By running script file you automatically install needed files for opencv. Run the following code:

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

In case if you install different version of the library please update the first line of version inside the installation script. For more information use this tutorial. Compile it with the next line:

g++ `pkg-config --cflags opencv` example.cpp `pkg-config --libs opencv`
like image 1
Giorgi Gvimradze Avatar answered Oct 04 '22 00:10

Giorgi Gvimradze