25

我只是用

#include <opencv2/opencv.hpp>

一切都奏效了。我可以问为什么我们应该这样做:

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

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

原谅我问了这么简单的问题。

4

3 回答 3

30

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

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

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

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

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

于 2013-10-04T09:26:31.567 回答
3

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

于 2013-10-04T09:20:12.333 回答