【问题标题】:Correct includes to use the new C++ API in opencv 2.3正确包括在 opencv 2.3 中使用新的 C++ API
【发布时间】:2012-04-07 12:46:51
【问题描述】:

对老的opencv 1比较熟悉,用了很久的C函数。但是,我在切换到 opencv 2.3 的 C++ API 时遇到问题

我下载了最新的稳定版(2.3.1),但里面的例子要么使用旧的 C 函数,要么包含"opencv2/highgui/highgui.hpp"

问题是,我的include/opencv2 目录中的唯一文件是opencv.hpp。如果我包括在内,则有很多不正确的路径。 在opencv.hpp里面有这样的东西:

#include "opencv2/core/core_c.h"
#include "opencv2/core/core.hpp"
#include "opencv2/flann/miniflann.hpp"
#include "opencv2/imgproc/imgproc_c.h"

等等

但是,在我的 opencv 目录中,包含文件位于以下文件夹中:

modules/core/include/opencv2/core
modules/flann/include/opencv2/flann
modules/imgproc/include/opencv2/imgproc

等等。

那么,如果我必须为每个标头手动指定包含路径,那么 opencv.hpp 的意义何在?在 opencv 网站 (http://opencv.willowgarage.com) 上,教程要么已经过时,要么根本没有解决这个问题,而是直接跳到算法。

编辑:我正在使用 Qt,如果这很重要的话。我从http://code.opencv.org/svn/opencv/branches/2.3/下载了源码并构建成功。

Edit2:是的,这很重要。缺少一个 Qt 头文件,因此 opencv 的构建过程跳过了一些库。

【问题讨论】:

    标签: c++ qt opencv include


    【解决方案1】:

    我已经很久没有使用opencv 2.3.1了,但是到目前为止使用来自opencv的包含已经足够了

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

    【讨论】:

    • cv.h 包含以下内容:#include "opencv2/core/core_c.h" #include "opencv2/core/core.hpp" #include "opencv2/imgproc/imgproc_c.h" #include "opencv2/imgproc/imgproc.hpp" 等,所以我仍然有同样的问题。您使用什么包含路径?您是否手动设置了 opencv2/... 的所有包含路径?
    • @vsz 我猜opencv/cv.h 的重点是你不必担心个人包含的问题。如果你想更细粒度,那么你可以包括例如opencv/cxcore.h 等等。
    • 问题是,当我包含 opencv/cv.h 时,我得到编译器错误,因为它找不到 "opencv2/core/core_c.h" 和所有其他人。
    • 但是当你构建时,modules 部分会丢失,所有标题都应该以opencvopencv2 结尾。你关注this了吗?
    • 你必须手动复制文件或者你需要的所有包含都在'opencv'和'opencv2'以外的地方是没有意义的,所以我认为必须有一些东西你的构建出了问题。
    【解决方案2】:

    我最近开始学习 opencv (2.3),正如 juanchopanza 所提到的,这应该足够了。我正在使用 osx 并安装了 opencv 1.0,所以我机器上的基本程序如下所示:

    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    
    using namespace cv;
    
    int main()
    {
        namedWindow("HelloCV2");
        imshow("image",imread("../HelloCV2/dolphin_1.jpg"));
        waitKey(5000);
        return 1;
    }
    

    确保您的路径设置正确。 目前我正在使用 Qt,所以 .pro 文件如下所示:

    QT       += core
    
    QT       -= gui
    
    TARGET = HelloCV2
    CONFIG   += console
    CONFIG   -= app_bundle
    
    TEMPLATE = app
    
    
    SOURCES += main.cpp
    
    INCLUDEPATH += /opt/local/include/ #this is where the header files are on my machine
    LIBS += /opt/local/lib/libopencv_core.2.3.1.dylib
    LIBS += /opt/local/lib/libopencv_highgui.2.3.1.dylib
    

    HTH

    【讨论】:

    • 顺便说一句,这两个包括似乎都在opencv/highgui.h
    • 你的包含路径中有&lt;YOUR_OPENCV_DIR&gt;/include,所以你的#include &lt;opencv2/core/core.hpp&gt;实际上是#include &lt;YOUR_OPENCV_DIR&gt;/include/opencv2/core/core.hpp&gt;。我的问题是,在我的include/opencv2 目录中除了opencv.hpp 之外没有nothing。正如我在问题中所写的那样,所有其他标题都在它们单独的目录中。
    • @vsz 你用的是什么操作系统?如果您在文件系统上搜索丢失的头文件,它们是否会显示出来?
    • @George Profenza:是的,他们出现了。请参阅我的问题的第二部分:modules/core/include/opencv2/coremodules/flann/include/opencv2/flann 等。
    • @George Profenza:在Windows下,就像C:\opencv\modules\core\include\opencv2\core\core.hpp
    【解决方案3】:

    我想我找到了问题所在。我拥有的Qt源(4.6.3)在corelib/global中没有qconfig.h,所以当我构建opencv时,并没有创建所有库,也没有复制头文件。

    只是为了让其他有同样问题的人知道它,而不是浪费时间寻找解决方案:qtconfig.h 不包含在 Qt 源代码分发中。您必须自己创建该文件,其目录中有许多模板,或者重命名其中一个(qconfig-largeqconfig-minimal 等),或者只创建一个空的qconfig.h

    编辑:我不向任何人推荐这种方式。我下载创建了一个mingw make,重新下载了所有内容,它现在可以工作了。我必须注意我构建的 opencv 的 mingw 版本与使用 Qt 的版本相同。

    【讨论】:

      【解决方案4】:

      诀窍是构建“安装”项目。这会将所有标题等收集到一个目录中,并将启用示例显示的包含结构。

      # create a build-directory, run cmake etc.
      make
      make install
      

      【讨论】:

      • 为了它是一个好的答案,请添加一些代码或示例,这种类型的答案实际上应该是一个评论
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      • 2011-09-28
      • 2021-11-12
      • 2017-07-27
      • 1970-01-01
      相关资源
      最近更新 更多