在 C++ 中编译 opencv

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/9094941/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-27 12:17:46  来源:igfitidea点击:

compiling opencv in c++

c++opencvimage-processingcompilation

提问by nkint

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

在来自 /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:错误:在输入结束时预期为“}”'toUtf16' 之前的预期初始值设定项 /usr/include/opencv/cxcore.hpp:80: 错误:'format' 之前的预期初始值设定项 /usr/include/opencv/cxcore.hpp:82: 错误:':' 标记之前的预期初始值设定项 m .cpp:38: 错误:输入结束时应为“}”'toUtf16' 之前的预期初始值设定项 /usr/include/opencv/cxcore.hpp:80: 错误:'format' 之前的预期初始值设定项 /usr/include/opencv/cxcore.hpp:82: 错误:':' 标记之前的预期初始值设定项 m .cpp:38: 错误:输入结束时应为“}”

this is my copencv lib content:

这是我的 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

i'm on ubuntu 10.10

我在 ubuntu 10.10

回答by karlphillip

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 opencvin 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++ 命令行中的路径和库。

回答by Jonathan Ben-Avraham

if your development environment does not have pkg-configand because of this the accepted answer by karlphilipis 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

回答by Sendjasni

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

我建议你使用的CMake编译OpenCV使用G++,这种方式比较适合,我想。

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

回答by Giorgi Gvimradze

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

    chmod +x install-opencv.sh
    ./install-opencv.sh
    
  1. 下载OpenCV文件夹中的源文件并 安装-opencv.sh脚本。
  2. 通过运行脚本文件,您可以自动安装 opencv 所需的文件。运行以下代码:

    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 thistutorial. Compile it with the next line:

如果您安装不同版本的库,请更新安装脚本中版本的第一行。有关更多信息,请使用教程。用下一行编译它:

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