我目前正在實施一個通用分類程序,其中用戶從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!謝謝:)
安德烈
規範的C++方法是執行'dynamic_cast'並檢查空結果。 –
啊,完美,這很容易;)...因爲在我提到的帖子中,'dynamic_cast'被認爲是無效的,並且我嘗試過type_id條件。你知道爲什麼這在我的情況下返回false? – Seastar
[你沒有把值類型和指針類型混合在一起嗎?](http://coliru.stacked-crooked.com/a/be2aef2e22dd079b)。你有'StatModel *'和'cv :: ml:ANN_MLP'來比較 –