在 opencv c++ 中确定 StatModel 的类型
Determine type of StatModel in opencv c++
我目前正在实施一个通用的 classification 程序,用户输入一个标记的数据集和来自 opencv 的机器学习技术,程序训练这个分类器。
因为对于某些 class 化器(在我的示例神经网络中),输入数据结构需要不同(不是 class 标签的整数,而是每个 [= 由索引 -1/1 组成的数组31=]),我将整数 class 标签的转换器应用于数组 class 标签。由于我只需要为分类器 ANN_MLP 而不是其他可能的 class 分类器执行此操作,因此我正在寻找一种方法来检查哪种 StatModel(superclass of all classopencv 中的 ifiers)我的输入 classifier 是。
所以我正在寻找这样的东西:
void validate(cv::ml::StatModel* classifier){
if(classifier.ofType(cv::ml::ANN_MLP))
do something
else
do something else
}
有谁知道 opencv 中是否有检查 sub-/superclasses 类型的功能?
我试过检查
if(typeid(cv::ml::ANN_MLP).hash_code() == typeid(classifier).hash_code())
和
if(typeid(cv::ml::ANN_MLP)==typeid(classifier))
来自 C++ equivalent of instanceof,但这总是 returns 错误,可能是因为如果在此函数中使用 classifier 会转换为 StatModel?但是 subclass 的底层结构不应该保存在某个地方吗?对不起,如果这是一个愚蠢的问题,但我是这种 "casting"/实例问题的新手......
非常感谢任何帮助!谢谢:)
安德里亚
您忘记传递的参数是指针类型:StatModel*
。因此,您需要将它与 cv::ml::ANN_MLP
的指针类型进行比较,或者将其从传入的类型中剥离。
或者,dynamic_cast
,尽管速度较慢,但也适用于 ANN_MLP
的子类型。
我目前正在实施一个通用的 classification 程序,用户输入一个标记的数据集和来自 opencv 的机器学习技术,程序训练这个分类器。 因为对于某些 class 化器(在我的示例神经网络中),输入数据结构需要不同(不是 class 标签的整数,而是每个 [= 由索引 -1/1 组成的数组31=]),我将整数 class 标签的转换器应用于数组 class 标签。由于我只需要为分类器 ANN_MLP 而不是其他可能的 class 分类器执行此操作,因此我正在寻找一种方法来检查哪种 StatModel(superclass of all classopencv 中的 ifiers)我的输入 classifier 是。
所以我正在寻找这样的东西:
void validate(cv::ml::StatModel* classifier){
if(classifier.ofType(cv::ml::ANN_MLP))
do something
else
do something else
}
有谁知道 opencv 中是否有检查 sub-/superclasses 类型的功能?
我试过检查
if(typeid(cv::ml::ANN_MLP).hash_code() == typeid(classifier).hash_code())
和
if(typeid(cv::ml::ANN_MLP)==typeid(classifier))
来自 C++ equivalent of instanceof,但这总是 returns 错误,可能是因为如果在此函数中使用 classifier 会转换为 StatModel?但是 subclass 的底层结构不应该保存在某个地方吗?对不起,如果这是一个愚蠢的问题,但我是这种 "casting"/实例问题的新手...... 非常感谢任何帮助!谢谢:)
安德里亚
您忘记传递的参数是指针类型:StatModel*
。因此,您需要将它与 cv::ml::ANN_MLP
的指针类型进行比较,或者将其从传入的类型中剥离。
或者,dynamic_cast
,尽管速度较慢,但也适用于 ANN_MLP
的子类型。