opencv::Ptr的动态强制转换 我目前在同一个类中C++中实现了不同的OpenCV机器学习工具。因此,我遇到了将超类cv::ml::StatModel的指针向下投射到子类cv::ml::SVM(例如)的问题

opencv::Ptr的动态强制转换 我目前在同一个类中C++中实现了不同的OpenCV机器学习工具。因此,我遇到了将超类cv::ml::StatModel的指针向下投射到子类cv::ml::SVM(例如)的问题,c++,opencv,pointers,casting,dynamic-cast,C++,Opencv,Pointers,Casting,Dynamic Cast,在在线教程中,通常会发现opencv分类器的实现如下所示: cv::Ptr<cv::ml::SVM> classifier = cv::ml::SVM::create(); cv::Ptr分类器=cv::ml::SVM::create(); 我要做的是在类构造函数中进行动态强制转换。这是我的类变量的一部分: class Classifier{ private: cv::Ptr<cv::ml::StatModel> classifier; cv::Ptr

在在线教程中,通常会发现opencv分类器的实现如下所示:

cv::Ptr<cv::ml::SVM> classifier = cv::ml::SVM::create();
cv::Ptr分类器=cv::ml::SVM::create();
我要做的是在类构造函数中进行动态强制转换。这是我的类变量的一部分:

class Classifier{
private:
    cv::Ptr<cv::ml::StatModel> classifier;
    cv::Ptr<cv::ml::SVM> SVM;
//... followed by more code };
类分类器{
私人:
cv::Ptr分类器;
cv::Ptr-SVM;
//…后跟更多代码};
在我的构造函数中:

Classifier::Classifier(const char* filename, cv::ml::SVM& svm){
    bool load = Classifier::getData(filename);
    if (load==0){
        cout << "Error opening file!" << endl;
    }
    else{
        classifier = &svm;
        //Here I want to do something linke this, just with cv::Ptr:
        //the following line gives compiler errors because c++ does not know that cv::Ptr is a pointer...
        SVM = dynamic_cast<cv::ml::SVM*>(classifier); 
        Classifier::setUpSVM();
    }
}
分类器::分类器(常量字符*文件名,cv::ml::SVM和SVM){ bool load=Classifier::getData(文件名); 如果(负载==0){
cout是的,有一个openCV的替代方案
dynamic_cast()
专门为
cv::Ptr
编写。它被称为…:D这方面还有类似的const cast和static cast的替代方法。

作为我问题的更新:在运行时,我在
dynamic\u cast
行(使用普通指针而不是opencv Ptr)得到一个
分段错误.有人能帮我用opencv Ptr做动态播放吗?啊,哦,伙计,有时候仔细看会有帮助:P我确实看了文档,但只看了静态播放:/谢谢!没问题,很高兴我能帮上忙;)保重!