我只是用
#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 文件中。这意味着为您减少输入,但最终为编译器提供更大的文件。因此,编译时间较长。-lopencv_core -lopencv_imgproc
如果您只使用图像处理模块。#include <opencv2/opencv.hpp>
此头文件在其正文中包含 OpenCV 中的所有其他头文件。因此,如果您包含该文件,那就绰绰有余了。
“ .h”用于 C,“ .hpp”用于 C++。这只是标准。
只需打开 opencv2/opencv.hpp 文件,我想你就会得到答案。