【问题标题】:compiling opencv in c++在 C++ 中编译 opencv
【发布时间】:2012-02-24 01:56:47
【问题描述】:

我有一个只有导入的文件:

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

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

using namespace cv;
using namespace std;

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

}

我尝试使用 g++ -I/usr/include/opencv -lopencv -lm m.cpp 进行编译

但得到一点错误:

在 /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:错误:输入结尾处应为“}”

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

我在 ubuntu 10.10

【问题讨论】:

    标签: c++ opencv image-processing compilation


    【解决方案1】:

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

    在最新的 OpenCV 版本上你应该这样做:

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

    然后尝试编译它:

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

    注意:如果你只在命令行中执行pkg-config --cflags --libs opencv,你会看到你需要在g++命令行中包含的路径和库。

    【讨论】:

    • 叹息。这确实编译但我仍然在这个问题stackoverflow.com/q/9088228/433685
    • 我总是忘记 pkg-config 实用程序的名称。感谢您提供简单的解决方案!
    • 假设我在一个目录中安装并构建了一个openCV版本(全局版本不同)。我应该如何更改您发布的命令以使用新的本地版本的 openCV 编译和构建我的项目?
    • 执行 pkg-config --cflags --libs opencv 以查看全局版本传递给 g++ 的确切参数。然后,只需复制相同的标志并使用您的本地路径。简单!
    • 我从源代码安装了 4.2,并且在构建时必须执行以下步骤:github.com/opencv/opencv/issues/13154#issuecomment-456652297
    【解决方案2】:

    如果您的开发环境没有 pkg-config 并且因此 accepted answer by karlphilip 不实用,或者,您需要知道链接您的应用程序所需的最小库集,然后假设代码如

    #include <cv.h>
    #include <highgui.h>
    
    int main()
    {
        return 0;
    }
    

    您可以从以下列表中按顺序从顶部添加库参数,直到找到所需的最小参数集:

    -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
    

    在我的旧 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;
    }
    

    然后你会编译和链接

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

    【讨论】:

    • 我尝试在命令行上从这个家伙的视频youtube.com/watch?v=cgo0UitHfp8 编译 g++ 版本,因为我想在没有 VS 的情况下尝试它。它可以编译,但是当我运行程序时没有任何反应。
    • 没关系,这是缺少 windows dll 文件的问题。不过,谢谢您的上述回答。
    • 我需要添加 opencv_contrib 但它不在包列表中,因为我可以使用命令 pkg-config --libs opencv 看到它。
    【解决方案3】:

    我建议你用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})
    

    【讨论】:

    • 有了这个 cmake 文件,我必须将包含更改为“ #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp"
    • @jjcf89 很好,很乐意提供帮助。 CMake的使用非常适合编译,你真的应该考虑使用它。对我来说,它帮助了我很多,也节省了时间。
    【解决方案4】:
    1. 下载OpenCV文件夹中的源文件和 install-opencv.sh 脚本。
    2. 通过运行脚本文件,您 自动安装opencv所需的文件。运行以下 代码:

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

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

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

    【讨论】:

      【解决方案5】:

      我认为接受的答案有点老了。

      至少对于今天最新发布的 OpenCV 4.X,您可以使用:

      #include <opencv2/opencv.hpp>
      

      并通过以下方式编译您的程序:

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

      注意opencv4,而不仅仅是opencv

      例如使用上面的命令编译如下your_program_file.cpp文件:

      #include <opencv2/opencv.hpp>
      
      int main() {
      
          std::cout << "The current OpenCV version is " << CV_VERSION << "\n";
      
          return 0;
      
      }
      

      并运行:

      ./your_program 
      

      输出:

      The current OpenCV version is 4.4.0
      

      这确实符合我当前的 OpenCV 设置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-23
        • 1970-01-01
        • 2011-07-15
        • 2016-04-06
        • 1970-01-01
        • 2018-01-13
        相关资源
        最近更新 更多