在c ++中编译opencv

nki*_*int 21 c++ opencv compilation image-processing

我有一个只导入的文件:

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

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

using namespace cv;
using namespace std;

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

}
Run Code Online (Sandbox Code Playgroud)

我尝试用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:错误:'format'/ usr/include/opencv之前的预期初始化程序/cxcore.hpp:82:错误:在':'之前的预期初始化程序令牌m.cpp:38:错误:在输入结束时预期'}'

这是我的copencv lib内容:

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
Run Code Online (Sandbox Code Playgroud)

我在ubuntu 10.10上

kar*_*lip 54

您需要正确包含标题-I(大写i)和库-l(小写L).

在最新的OpenCV版本上,您应该:

#include <cv.h>
#include <highgui.h>
Run Code Online (Sandbox Code Playgroud)

然后尝试编译它:

g++ m.cpp -o app `pkg-config --cflags --libs opencv`
Run Code Online (Sandbox Code Playgroud)

注意:如果仅pkg-config --cflags --libs opencv在命令行中执行,您将看到需要包含在g ++命令行中的路径和库.


Jon*_*ham 7

如果您的开发环境没有,pkg-config并且因此,karlphilip接受的答案不切实际,或者您需要知道链接您的应用程序所需的最少库集,然后假设代码如下

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

int main()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

您可以从顶部开始依次从以下列表中添加库参数,直到找到所需的最少参数集:

  -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
Run Code Online (Sandbox Code Playgroud)

在我的旧x86_64 Ubuntu 12.04机器上。

假设C ++代码例如

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

using namespace cv;
using namespace std;

int main( int argc, char** argv )
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

那么您将编译并与

g++ hello.cpp -o hello \
    -I /usr/include/opencv2 \
    -L /usr/lib \
    -lopencv_core \
    -lopencv_imgproc
Run Code Online (Sandbox Code Playgroud)


ase*_*sni 5

我建议你使用CMake来编译OpenCVG++我认为这种方式更合适。

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})
Run Code Online (Sandbox Code Playgroud)