oop — определить тип StatModel в переполнении стека opencv

В настоящее время я реализую программу общей классификации, где пользователь вводит маркированный набор данных и технику машинного обучения из opencv, и программа обучает этот классификатор.
Поскольку для некоторых классификаторов (в моем примере нейронных сетей) структура входных данных должна отличаться (не целое число как метка класса, а массив, составленный из индекса -1/1 для каждого класса), я применяю преобразователь целочисленного класса метка для метки класса массива. Поскольку мне нужно сделать это только для классификатора ANN_MLP, а не для других возможных классификаторов, я ищу способ проверить, какой тип StatModel (суперкласса всех классификаторов в opencv) мой классификатор ввода.

Поэтому я ищу что-то вроде этого:

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 ++ эквивалент instanceof, но это всегда возвращает false, возможно, потому что классификатор приведен к StatModel, если используется в этой функции? Но разве основная структура подкласса не должна быть где-то сохранена? Извините, если это глупый вопрос, но я новичок в такого рода проблемах «кастинга» / экземпляра …
Любая помощь очень ценится! Спасибо:)

Andrea

1

Решение

Вы забыли, что переданный параметр имеет тип указателя: StatModel*, Таким образом, вам нужно либо сравнить его с типом указателя cv::ml::ANN_MLP или лишить его из переданного типа.

С другой стороны, dynamic_castхотя и медленнее, также будет работать для подтипов ANN_MLP,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]