简体   繁体   English

在 c++ 中编译 opencv

[英]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我尝试用 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在 /usr/include/opencv/cxcore.hpp:46 中包含的文件中,来自 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' 没有命名输入/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: 错误:模板声明'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 的模板声明:错误:预期 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 'fromUtf16'/usr/include/opencv/cxcore.hpp:78 之前的初始化程序:错误:'toUtf16'之前的预期初始化程序/usr/include/opencv/cxcore.hpp:80:错误:'format'/usr/ 之前的预期初始化程序include/opencv/cxcore.hpp:82: error: expected initializer before ':' token m.cpp:38: error: expected '}' 在输入末尾

this is my copencv lib content:这是我的 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

i'm on ubuntu 10.10我在 ubuntu 10.10

You need to properly include the headers -I (capital i) and libraries -l (lowercase L). 您需要正确包含标题-I (大写i)和库-l (小写L)。

On the newest OpenCV versions you should do: 在最新的OpenCV版本上,您应该:

#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. 注意:如果在命令行中只执行pkg-config --cflags --libs opencv ,您将看到需要包含在g ++命令行中的路径和库。

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 如果您的开发环境没有pkg-config并且因此karlphilip接受的答案不实用,或者,您需要知道链接应用程序所需的最小库集,然后假设代码如

#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 例如,本文顶部列出的C源代码仅编译和链接

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. 在我的旧x86_64 Ubuntu 12.04框中。

Assuming C++ code such as 假设C ++代码如

#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

I suggest you use CMake to compile OpenCV with G++ , this way is more suitable, I think. 我建议你使用CMake用G++编译OpenCV ,这种方式更合适,我想。

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})

I think that the accepted answer is a bit old.我认为接受的答案有点旧。

At least for OpenCV 4.X, the most recently release today, you can use:至少对于今天最新发布的 OpenCV 4.X,您可以使用:

#include <opencv2/opencv.hpp>

and compile your program by something like:并通过以下方式编译您的程序:

g++ your_program_file.cpp -o your_program `pkg-config --cflags --libs opencv4`

Note opencv4 and not only opencv .注意opencv4而不仅仅是opencv

For example, using the command above to compile the following your_program_file.cpp file:例如,使用上面的命令编译以下your_program_file.cpp文件:

#include <opencv2/opencv.hpp>

int main() {

    std::cout << "The current OpenCV version is " << CV_VERSION << "\n";

    return 0;

}

And running:并运行:

./your_program 

Outputs:输出:

The current OpenCV version is 4.4.0

Which indeed matches with my current OpenCV settings.这确实符合我当前的 OpenCV 设置。

  1. Download source files in OpenCV folder and install-opencv.sh script. 下载OpenCV文件夹中的源文件和install-opencv.sh脚本。
  2. By running script file you automatically install needed files for opencv. 通过运行脚本文件,您可以自动为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`

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM