opencv包含头文件出错的粗略解读

时间:2021-12-20 16:46:22



OpenCV新手遇到的问题很多问题之一就是#includeopencv头文件的时候经常会出错。程序明明就很简单,一个稍懂opencv的人都知道程序没有错误,但是一编译就是一大堆错误,就是找不到头文件。

  1. fatal error C1083: 无法打开包括文件:“cv.h”: No such file or directory  
  2. fatal error C1083: 无法打开包括文件:“highgui.h”: No such file or directory  
  3. ……  
这样的错误很常见吧,这是极有可能是文件(cv.h,highgui.h的路径设置得不对)。opencv从2.2版本以后<opencv root>include下有两个文件夹 opencv 和opencv2 。从官方的意思来看,它逐渐喜欢用opencv2里面的那种包含头文件的方式。

注意:<opencv root>是opencv2.2安装路径。每个人的路径都可能有所不同!!

   opencv包含头文件出错的粗略解读


解读一 :Opencv(C:\OpenCV-2.2.0\VS2008\include\opencv)这个文件夹里面有什么呢?

opencv包含头文件出错的粗略解读

cv.h highgui.h是不是很熟悉哈,如果你想用#include “cv.h”这样的方式,那请确保你配置编译器包含文件的时候路径是:C:\OpenCV-2.2.0\VS2008\include\opencv。因为cv.h在C:\OpenCV-2.2.0\VS2008\include\opencv里面。这就好比博主在中国,你非得跑去非洲喊我的名字找我,能找到我才怪呢!(关于配置编译器可以点这里

如果你在编译器配置里面填入的是:C:\OpenCV-2.2.0\VS2008\include\,那当你调用cv.h的时候你必须是这样的:

  1. #include “opencv/cv.h”  

解读二:Opencv2(C:\OpenCV-2.2.0\VS2008\include\opencv2)这个文件夹里面有什么呢?

    opencv包含头文件出错的粗略解读

Opencv.hpp本身是一个头文件,它包含了opencv全部的头文件。有图有真相:

  1. #ifndef __OPENCV_ALL_HPP__  
  2.   
  3. #define __OPENCV_ALL_HPP__  
  4.   
  5.    
  6.   
  7. #include "opencv2/core/core_c.h"  
  8.   
  9. #include "opencv2/core/core.hpp"  
  10.   
  11. #include "opencv2/flann/flann.hpp"  
  12.   
  13. #include "opencv2/imgproc/imgproc_c.h"  
  14.   
  15. #include "opencv2/imgproc/imgproc.hpp"  
  16.   
  17. #include "opencv2/video/tracking.hpp"  
  18.   
  19. #include "opencv2/video/background_segm.hpp"  
  20.   
  21. #include "opencv2/features2d/features2d.hpp"  
  22.   
  23. #include "opencv2/objdetect/objdetect.hpp"  
  24.   
  25. #include "opencv2/calib3d/calib3d.hpp"  
  26.   
  27. #include "opencv2/ml/ml.hpp"  
  28.   
  29. #include "opencv2/highgui/highgui_c.h"  
  30.   
  31. #include "opencv2/highgui/highgui.hpp"  
  32.   
  33. #include "opencv2/contrib/contrib.hpp"  
  34.   
  35.    
  36.   
  37. #endif  


除此之外的的都是文件夹,每一个文件夹都是一个头文件,仅此而已。所以如果你配置编译器包含文件的时候是:C:\OpenCV-2.2.0\VS2008\include,那当你想用这种新的方式调用opencv函数的时候,那最简单最可靠的方式就是

  1. #include “opencv2/opencv.hpp”  

后话

        如果你不知道到底是用C:\OpenCV-2.2.0\VS2008\include\opencv还是C:\OpenCV-2.2.0\VS2008\include\opencv2,那干脆在包含文件那一项里面,把这两个都填进去!!这样错误的概率就有可能会少了很多。


其实,不管是旧的方式还是新的方式,你只要明确你要包含的头文件在哪个文件夹里面,路径对了,然后再配置编译器。那一切就容易了,对于新手来说,很多东西都是带有一种畏惧、膜拜心理。当初对于动不动就自己写一个头文件,然后包含进去的人超膜拜。后来摸清楚什么是头文件以后,心理拔凉拔凉的:哥怎么就那么容易膜拜人呢,(*^__^*) 。

先写这么多权当抛砖引玉!


26
1