[MO]opencv包含頭文件出錯的粗略解讀


Opencv新手遇到的問題很多問題之一就是#include opencv頭文件的時候經常會出錯。程序明明就很簡單,一個稍懂opencv的人都知道程序沒有錯誤,但是一編譯就是一大堆錯誤,就是找不到頭文件。

fatal error C1083: 無法打開包括文件:“cv.h”: No such file or directory
fatal error C1083: 無法打開包括文件:“highgui.h”: No such file or directory
……
這樣的錯誤很常見吧,這是極有可能是文件(cv.h,highgui.h的路徑設置得不對)。opencv從2.2版本以後<opencv root>include下有兩個文件夾 opencv 和opencv2 。從官方的意思來看,它逐漸喜歡用opencv2裏面的那種包含頭文件的方式。

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

  


解讀一 :Opencv(C:\OpenCV-2.2.0\VS2008\include\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的時候你必須是這樣的:

#include “opencv/cv.h”

解讀二:Opencv2(C:\OpenCV-2.2.0\VS2008\include\opencv2)這個文件夾裏面有什麼呢?

   

Opencv.hpp本身是一個頭文件,它包含了opencv全部的頭文件。有圖有真相:

#ifndef __OPENCV_ALL_HPP__

#define __OPENCV_ALL_HPP__

 

#include "opencv2/core/core_c.h"

#include "opencv2/core/core.hpp"

#include "opencv2/flann/flann.hpp"

#include "opencv2/imgproc/imgproc_c.h"

#include "opencv2/imgproc/imgproc.hpp"

#include "opencv2/video/tracking.hpp"

#include "opencv2/video/background_segm.hpp"

#include "opencv2/features2d/features2d.hpp"

#include "opencv2/objdetect/objdetect.hpp"

#include "opencv2/calib3d/calib3d.hpp"

#include "opencv2/ml/ml.hpp"

#include "opencv2/highgui/highgui_c.h"

#include "opencv2/highgui/highgui.hpp"

#include "opencv2/contrib/contrib.hpp"

 

#endif


除此之外的的都是文件夾,每一個文件夾都是一個頭文件,僅此而已。所以如果你配置編譯器包含文件的時候是:C:\OpenCV-2.2.0\VS2008\include,那當你想用這種新的方式調用opencv函數的時候,那最簡單最可靠的方式就是

#include “opencv2/opencv.hpp”

後話

        如果你不知道到底是用C:\OpenCV-2.2.0\VS2008\include\opencv還是C:\OpenCV-2.2.0\VS2008\include\opencv2,那乾脆在包含文件那一項裏面,把這兩個都填進去!!這樣錯誤的概率就有可能會少了很多。


其實,不管是舊的方式還是新的方式,你只要明確你要包含的頭文件在哪個文件夾裏面,路徑對了,然後再配置編譯器。那一切就容易了,對於新手來說,很多東西都是帶有一種畏懼、膜拜心理。當初對於動不動就自己寫一個頭文件,然後包含進去的人超膜拜。後來摸清楚什麼是頭文件以後,心理拔涼拔涼的:哥怎麼就那麼容易膜拜人呢,(*^__^*) 。

先寫這麼多權當拋磚引玉!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章