在 OpenCV 中 #include C++ 头文件



>我只是用

#include <opencv2/opencv.hpp>

事情奏效了。请问我们为什么要这样做:

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

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

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

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

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

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

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

".h"代表

C,".hpp"代表C++。这只是标准。

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

最新更新