【问题标题】:#include C++ header files in opencv#在opencv中包含C++头文件
【发布时间】:2013-10-11 05:30:33
【问题描述】:

我只是用

#include <opencv2/opencv.hpp>

一切顺利。我可以问为什么我们应该这样做:

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <opencv2/highgui/highgui.hpp>

为什么这里是 *.hpp 文件而不是 *.h 文件?

请问这么简单的问题。

【问题讨论】:

  • 什么东西?你应该描述你在用 openCV 做什么。根据您可以决定包含哪些内容。包含不必要的代码会为您的程序加载大量不必要的代码。

标签: c++ opencv


【解决方案1】:

.hppC++ 语言头文件的约定。由于 OpenCV 有一个与 C++ 并行的 C API 的悠久历史,人们可以很容易地理解为什么编写库的人选择这个扩展来避免混淆。 p>

对于全局与小包含的问题,您需要回忆一下 C/C++ 中的工作原理。 头文件只是在编译之前复制到您的 .c 文件中。

  • 当您使用全局包含 opencv.hpp(这是某种保护伞,因为它包含所有其他文件)时,所有库头文件都被包含在内,因此被复制到您的 .cpp 文件中。这意味着为您减少输入,但最终为编译器提供更大的文件。因此,编译时间更长
  • 当您使用本地头文件时,您只需一次添加一个 OpenCV 模块。因此,如果您将自己限制在实际需要的模块中,您将获得更快的编译。另一个优点是您可以真正了解您在程序中使用了哪些模块,这有助于您键入相应的正确的链接器选项,例如,-lopencv_core -lopencv_imgproc,如果您仅使用图像处理模块。

【讨论】:

  • 更多关于.h.hpp的信息可以在this questions找到。
  • 谢谢。我认为您提到的问题中的原因 1 确实是最重要的一个,因为 OpenCV 至少从 1.0(3 或 4 年前)开始就已经并行使用 C 和 C++ API。
  • 谢谢sansuiso和ffriend
【解决方案2】:
#include <opencv2/opencv.hpp>

此头文件在其正文中包含 OpenCV 中的所有其他头文件。因此,如果您包含该文件,那就绰绰有余了。

".h" 用于 C,".hpp" 用于 C++。这只是标准。

【讨论】:

    【解决方案3】:

    只要打开 opencv2/opencv.hpp 文件,我想你就会得到答案。

    【讨论】:

    • 谢谢。我把opencv.hpp的链接贴在这里:link
    猜你喜欢
    • 2013-10-24
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多