2017-07-27 29 views
1

我目前正在實施一個通用分類程序,其中用戶從opencv輸入一個帶標籤的數據集和一個機器學習技術,程序訓練這個分類器。 由於對於一些分類器(在我的示例中是神經網絡),輸入數據結構需要不同(不是類標號的整數,而是每個類的索引-1/1組成的數組),我應用整數轉換器類標籤轉換爲數組類標籤。由於我只需要爲分類器ANN_MLP而不是其他可能的分類器執行此操作,因此我正在尋找一種方法來檢查我的輸入分類器是哪種StatModel(opencv中所有分類器的超類)。在opencv中確定StatModel的類型C++

所以我要尋找的是這樣的:

void validate(cv::ml::StatModel* classifier){ 
    if(classifier.ofType(cv::ml::ANN_MLP)) 
     do something 
    else 
     do something else 
} 

有誰知道是否有在OpenCV的一個功能檢查的子/超類型?

我試圖檢查

if(typeid(cv::ml::ANN_MLP).hash_code() == typeid(classifier).hash_code()) 

if(typeid(cv::ml::ANN_MLP)==typeid(classifier)) 
C++ equivalent of instanceof

,但這始終返回false,可能是因爲如果在這個函數中使用的分類器轉換爲StatModel?但是,如果子類的底層結構不能保存在某個地方?對不起,如果這是一個愚蠢的問題,但我是新的這種「鑄造」/實例問題... 任何幫助是非常apprechiated!謝謝:)

安德烈

+0

規範的C++方法是執行'dynamic_cast'並檢查空結果。 –

+0

啊,完美,這很容易;)...因爲在我提到的帖子中,'dynamic_cast'被認爲是無效的,並且我嘗試過type_id條件。你知道爲什麼這在我的情況下返回false? – Seastar

+0

[你沒有把值類型和指針類型混合在一起嗎?](http://coliru.stacked-crooked.com/a/be2aef2e22dd079b)。你有'StatModel *'和'cv :: ml:ANN_MLP'來比較 –

回答

0

你忘了傳遞的參數爲指針類型:StatModel*。因此,你需要或者比較它的指針類型的cv::ml::ANN_MLP或從傳入的類型剝離它。

或者,dynamic_cast,雖然慢,也將用於ANN_MLP亞型工作。