【问题标题】:Dynamic cast for opencv cv::Ptropencv cv::Ptr 的动态转换
【发布时间】:2017-08-02 09:06:15
【问题描述】:

我目前正在同一个类中用 c++ 实现不同的 opencv 机器学习工具。因此,我遇到了将超类 cv::ml::StatModel 的指针向下转换为子类 cv::ml::SVM 的问题(例如)。

在在线教程中,通常会找到这样的 opencv 分类器实现:

cv::Ptr<cv::ml::SVM> classifier = cv::ml::SVM::create();

我想做的是在类构造函数中进行动态转换。这是我的类变量的一部分:

class Classifier{
private:
    cv::Ptr<cv::ml::StatModel> classifier;
    cv::Ptr<cv::ml::SVM> SVM;
//... followed by more code };

在我的构造函数中:

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();
    }
}

有人知道opencv 是否为cv::Ptr 提供了dynamic_cast&lt;T&gt;() 的替代方案吗? 或者有经验不使用opencv 指针,而是使用“普通”c++ 指针来使用机器学习应用程序接口?我想知道这个实现是否会遇到问题,因为通常的做法似乎是使用 opencv cv::Ptr 类。

【问题讨论】:

  • 作为我的问题的更新:在运行时,dynamic_cast 行出现Segmentation Fault 错误(使用普通指针而不是 opencv Ptr)。谁能帮我用 opencv Ptr 做动态转换?

标签: c++ opencv pointers casting dynamic-cast


【解决方案1】:

是的,有一个专门为cv::Ptr 编写的dynamic_cast&lt;T&gt;() 的openCV 替代方案。它被称为...dynamicCast():D 也有类似的替代 const cast 和 static cast。

【讨论】:

  • 啊啊,天哪,有时仔细查看会有所帮助:P 我确实查看了文档,但只找到了 staticCast:/ 非常感谢!
  • 没问题,很高兴我能帮上忙;)保重!
猜你喜欢
  • 1970-01-01
  • 2022-06-13
  • 2014-04-22
  • 1970-01-01
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 2021-08-07
相关资源
最近更新 更多