之前文章寫完有個Flag,要寫OpenCV的解讀,后面寫了展會,看書等無關緊要的文章,現在距離12點還有21分鐘,我就簡短的寫一點分析。
首先,源碼我是從Github上面直接拉的最新的代碼,刪除一些無關緊要的文件,就變成了下面這樣。

其實在4的時代,只要導入這個頭文件就行,因為這個文件就是把所有的實現做了一個匯總。

里面集成了所有要使用的頭文件

里面有著條件宏來控制功能的開關與否

每次處理都需要的圖片讀取函數,在這里被定義

整個文件里面有的函數和信息空間

這個函數就是判斷是不是一個圖像文件

我們注意到前面有個宏

這個是官方文檔給的函數的說明,看源碼之前一定要很熟悉官方的文檔才行

支持讀取的文件

所以這個宏是什么意思呢?
這里也插一句,我以前看騰訊的TinyOS就看到了很多這樣的函數定義,我就很疑惑,這個到底是怎么個用法?我為什么學的里面就有。
其實我理解的應該是,這個宏首先不影響函數的功能,就是有或沒有都沒有關系,那作用是啥?
是說明!說明這個函數的一些屬性,比如它是不是一個系統的API,或者是需要你調用的時候自己實現的。我是這樣的理解,如果不對也請聯系我,讓我搞明白這個事情。
這里解釋一下C++里面的這個前置宏(前綴?)的大致用法。
CV_EXPORTS_W在
modules/core/include/opencv2/core/types_c.h中定義為 的別名
CV_EXPORTS,并且在同一文件
CV_EXPORTS中定義為:
換句話說,它是定義:
__declspec(dllexport)在windows平臺上的別名CVAPI_EXPORTS,否則為空。
上面代碼里面的_delcspce(dllexport)被定義為宏,這樣可以提高程序的可讀性!這個的作是是將函數定義為導出函數,也就是說這個函數要被包含這個函數的程序之外的程序調用!
CV_WARP 用作腳本的標志以創建函數或方法的包裝器。它用于創建 Python 或 Java 包裝器。
應該是多平臺之間不同的編譯器有不同的編譯選項,只是為了以后其它平臺有需要添加的或擴展的編譯時選項而預留的。例如在VC環境下進行回調函數的聲明時,很多時候都會加上_stdcall、_cdecl、 _fastcall這三個在windows平臺下指定函數調用的方式的編譯選項。所以,這種定義為空的宏的作用是預留下以后平臺移植時的其它選項的定義。應該僅僅是為了移植的方便。有時候也有可能是為了對函數進行標識,說明。
提高代碼的可移植性和平臺/編譯器無關性
宏定義必須寫在函數之外,其作用域是 #define 開始,到源程序結束。如果要提前結束它的作用域則用 #undef 命令

這樣的代碼幾乎在每個開源庫中都可能見到,主要的目的就是 C 和 C++ 混合編程,具體來說就是:
時間太短只能寫這么多了~

晚安~
https://www.51cto.com/article/645044.htmlhttps://zhuanlan.zhihu.com/p/447763456https://pangda.blog.csdn.net/article/details/125497601https://answers.opencv.org/question/6528/cv_wrap-and-cv_exports_w/https://blog.csdn.net/lh1573378488/article/details/50519577https://stackoverflow.com/questions/12083583/what-cv-exports-w-means