opencv 的动态转换 cv::Ptr
Dynamic cast for opencv cv::Ptr
我目前正在同一个 class 中用 C++ 实现不同的 opencv 机器学习工具。因此,我有将 superclass cv::ml::StatModel
的指针向下转换为 subclass cv::ml::SVM
(例如)的问题。
在在线教程中,通常会发现 opencv classifiers 的实现是这样的:
cv::Ptr<cv::ml::SVM> classifier = cv::ml::SVM::create();
我想做的是在 class 构造函数中进行动态转换。这是我的 class 变量的一部分:
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<T>()
的替代方案? 或者有不使用 opencv 指针的经验,而是 "normal"机器学习中使用c++指针API?我想知道我是否会 运行 遇到这个实现的问题,因为通常的做法似乎是使用 opencv cv::Ptr
class.
是的,有一个 openCV 替代方案 dynamic_cast<T>()
是专门为 cv::Ptr
编写的。它被称为... dynamicCast() :D 就此而言,还有 const cast 和 static cast 的类比替代方法。
我目前正在同一个 class 中用 C++ 实现不同的 opencv 机器学习工具。因此,我有将 superclass cv::ml::StatModel
的指针向下转换为 subclass cv::ml::SVM
(例如)的问题。
在在线教程中,通常会发现 opencv classifiers 的实现是这样的:
cv::Ptr<cv::ml::SVM> classifier = cv::ml::SVM::create();
我想做的是在 class 构造函数中进行动态转换。这是我的 class 变量的一部分:
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<T>()
的替代方案? 或者有不使用 opencv 指针的经验,而是 "normal"机器学习中使用c++指针API?我想知道我是否会 运行 遇到这个实现的问题,因为通常的做法似乎是使用 opencv cv::Ptr
class.
是的,有一个 openCV 替代方案 dynamic_cast<T>()
是专门为 cv::Ptr
编写的。它被称为... dynamicCast() :D 就此而言,还有 const cast 和 static cast 的类比替代方法。