覺得上篇自己摸索的有很多地方都做得不太好。
extern 方法定義
編譯器在產生dll檔案時會打亂method名稱,為讓方法保持原名稱,則extern "C"。
(原:)Normally, the C++ compiler will mangle the method names when packaging them into a .dll. Therefore, we instruct it to use the classic “C” style of signatures, which leaves the method names just as you wrote them.
範例
extern "C" int __declspec(dllexport) __stdcall Init()
宣告C++與C#互相溝通用的資料結構

- CascadeClassifier :做檢測的分類器。 特徵演算法有Haar和LBP。(源)(lbp明顯快於haar格式,但較不準確。)
- StructLayout: 定義對齊位元,例char型資料,對齊值為1,對於short型為2,對於int,float,double型別,其對齊值為4,單位位元組。 (源)



將拉伸數值分佈範圍從0-255。假設影像過曝(如藍色曲線),則直方圖均衡化能將其值範圍拉伸0-255區間內,使黑白更分明。
大概意思是Haar cascade的工作原理是一種"滑動視窗"的方法,通過在圖像中不斷的"滑動檢測視窗"來匹配人臉。因為圖像的圖元有大有小,圖像中的人臉因為遠近不同也會有大有小,所以需要通過scaleFactor參數設置一個縮小的比例,對圖像進行逐步縮小來檢測,這個參數設置的越大,計算速度越快,但可能會錯過了某個大小的人臉。其實可以根據圖像的圖元值來設置此參數,圖元大縮小的速度就可以快一點,通常在1~1.5之間。那麼,經過多次的反覆運算,實際會檢測出很多很多個人臉,這一點可以通過把minNeighbors 設為0來驗證。所以呢,minNeighbors參數的作用就來了,只有其"鄰居"大於等於這個值的結果才認為是正確結果。方法:
CascadeClassifier.detectMultiScale(輸入圖片, 輸出向量, scaleFactor=1.1 , minNeighbor=3);
- 輸入圖片: 只接受灰階
- scaleFactor:每次圖像縮小的比例。
- minNeighbor:每個候選矩形有多少個"鄰居",我的理解是:一個滑動窗口中的圖元需要符合幾個條件才能判斷為真。
- 返回Rect 型態,其包含<x,y,w,h>參數
- unsafe:讓你在C#能使用指標。
- fixed:使編譯器讓該變數記憶體位置不被garbage collector處理掉。

- The address operator & applied to a variable reference.
- An array
- A string
- A fixed-size buffer.