一、hpp檔案的說明:
hpp,其實質就是將.cpp的實現**混入.h標頭檔案當中,定義與實現都包含在同一檔案,則該類的呼叫者只需要include該cpp檔案即可,無需再 將cpp加入到project中進行編譯。而實現**將直接編譯到呼叫者的obj檔案中,不再生成單獨的obj,採用hpp將大幅度減少呼叫 project中的cpp檔案數與編譯次數,也不用再發布煩人的lib與dll,因此非常適合用來編寫公用的開源庫。
1、是header plus plus 的簡寫。a)不可包含全域性物件和全域性函式2、與*.h類似,hpp是c++程式標頭檔案 。
3、是vcl 專用的標頭檔案,已預編譯。
4、是一般模板類的標頭檔案。
5、一般來說,*.h裡面只有宣告,沒有實現,而*.hpp裡宣告實現都有,後者可以減 少.cpp的數量。
6、*.h裡面可以有using namespace std,而*.hpp裡則無。
7、*.hpp要注意的問題有:
由於hpp本質上是作為.h被呼叫者include,所以當hpp檔案中存在全域性物件或者全域性函式,而該hpp被多個呼叫者include時,將在鏈結時導致符號重定義錯誤。要避免這種情況,需要去除全域性物件,將全域性函式封裝為類的靜態方法。
b)類之間不可迴圈呼叫
二、檔案探秘在使用opencv3.0編寫**的過程中,總會遇到類似於下面的標頭檔案,
#include
出於好奇,於是輾轉到安裝目錄下招待該標頭檔案,其**如下
#ifndef __opencv_all_hpp__
#define __opencv_all_hpp__
#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/photo.hpp"
#include "opencv2/video.hpp"
#include "opencv2/features2d.hpp"
#include "opencv2/objdetect.hpp"
#include "opencv2/calib3d.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/videoio.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/ml.hpp"
#endif
這樣就比較好理解了,標頭檔案中包含了其他各模組的標頭檔案,依次是
core:核心功能模組,
imgproc:影象處理模組;
photo:影象修復和影象去噪模組,
features2d:2d功能框架,包括特徵檢測和描述等
objdetect:目標檢測模組,包括cascade classification和latent svm,
calib3d:主要包括相機校準(calibration)和三維重建等,
imgcodecs:用於影象檔案的載入(imread)和輸出(imwrite)
ml:機器學習模組,基本上是統計模型和分類演算法,包括svm、 nn、k-nearest neighbors等,我前面的一片翻譯博文中有提到。
至於各個模組的具體內容,可以到安裝目錄下找到標頭檔案(c:\opencv\opencv\build\include\opencv2),然後開啟檢視詳細**,每個檔案猶如一片海洋,你可以盡情享受徜徉在**世界的樂趣。
Opencv基礎入門筆記03
mat物件我們在學習影象處理的過程一直在接觸,那麼它到底是個什麼東西呢?當opencv 1.0發布時候沒有mat物件,是個c語言風格的資料結構iplimage來表示記憶體中影象物件,但是opencv開發者在做複雜影象處理演算法分析與計算時候,建立了很多iplimage這樣的資料結構,偶爾最後可能忘記...
OpenCV第一發 測試VS配置OpenCV
最近看到網上的視覺處理特別有意思,作為乙個甚至是計算機的門外漢來說直接學習第三方庫是很困難的,悔恨當初沒有去學計算機專業,哈哈哈哈哈哈哈哈哈,沒辦法了,為了對得起我的好奇心,我決定開始攻克它。第四步 開幹.配置環境變數,我的目錄是 e opencv build bin c 新增庫檔案目錄,我的目錄是...
初學opencv03 顏色空間
cv.destroyallwindows opencv中,系統影象預設為bgr格式,顏色三通道順序為b,g,r 分別對應索引為0,1,2 hsi hsv顏色空間 h的取值範圍為0 180。其中紅色對應0 綠色對應60 藍色對應120 相對於h通道顯示的時候,藍色顯示出來最亮。其餘兩變數範圍為0 25...