确定 opencv c++ 中 StatModel 的类型

Determine type of StatModel in opencv c++

本文关键字:类型 StatModel opencv c++ 确定      更新时间:2023-10-16

我目前正在实施一个通用分类程序,其中用户输入来自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++等效的实例,但这总是返回 false,可能是因为如果在此函数中使用分类器,则转换为 StatModel?但是子类的底层结构不应该保存在某个地方吗?对不起,如果这是一个愚蠢的问题,但我对这种"铸造"/实例问题很陌生...... 任何帮助都非常感谢!!谢谢:(

安德里亚

您忘记了传递的参数是指针类型:StatModel*。因此,您需要将其与指针类型进行比较cv::ml::ANN_MLP或将其从传入的类型中删除。

或者,dynamic_cast,尽管速度较慢,也适用于ANN_MLP的亚型。