我目前正在实施一个通用分类程序,其中用户从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'来比较 –