c++ - opencv cv::Ptr 的动态转换

标签 c++ opencv pointers casting dynamic-cast

我目前正在同一个类(class)中用 C++ 实现不同的 opencv 机器学习工具。因此我有向下转换父类(super class)指针的问题 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 是否提供了 dynamic_cast<T>() 的替代方案?对于 cv::Ptr ? 或者有不使用 opencv 指针的经验,而是使用“普通”c++ 指针来使用机器学习 API 的经验?我想知道这个实现是否会遇到问题,因为通常的做法似乎是使用 opencv cv::Ptr类。

最佳答案

是的,有一个 openCV 替代品 dynamic_cast<T>()专为 cv::Ptr 编写.它被称为... dynamicCast() :D 在这方面,还有 const cast 和 static cast 的类比替代方法。

关于c++ - opencv cv::Ptr 的动态转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45456319/

相关文章:

android - opencv android 在 10 秒后崩溃

pointers - 无法从指针接收器访问值

c++ - num++ 可以是 'int num' 的原子吗?

c++ - 如何正确地将参数从结构传递给函数?

opencv - 如何在 OSX 10.6.6 中将 opencv2.2 与 Qt4.7 集成?

python - 嵌入式平台OpenCV的特征检测

c - findAndReplace函数的实现

使用 char 指针更改 int 值

c# - C# 中的堆错误

C++ - 二维数组作为方法参数