opencv::Ptr的动态强制转换 我目前在同一个类中C++中实现了不同的OpenCV机器学习工具。因此,我遇到了将超类cv::ml::StatModel的指针向下投射到子类cv::ml::SVM(例如)的问题
在在线教程中,通常会发现opencv分类器的实现如下所示: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
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我确实看了文档,但只看了静态播放:/谢谢!没问题,很高兴我能帮上忙;)保重!