2017-08-02 2 views
1

Ich implementiere derzeit verschiedene opencv Machine Learning Tools in C++ in der gleichen Klasse. Daher habe ich das Problem, Zeiger der Oberklasse cv::ml::StatModel in die Unterklasse cv::ml::SVM (zum Beispiel) zu verwerfen.Dynamic Cast für opencv cv :: Ptr

In Online-Tutorials findet man in der Regel die Umsetzung der opencv Klassifizierer wie folgt aus:

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

Was ich will ist eine dynamische Umwandlung im Konstruktor der Klasse zu tun. Dies ist Teil meiner Klassenvariablen:

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

Und in meinem Konstruktor:

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

Weiß jemand, ob opencv eine Alternative zu dynamic_cast<T>() für cv::Ptr bietet? Oder hat alternativ Erfahrung mit der Verwendung der opencv-Zeiger, sondern "normalen" C++ - Zeiger, um die Machine Learning API zu verwenden? Ich frage mich, ob ich Probleme mit dieser Implementierung bekommen werde, denn die gängige Praxis scheint die opencv cv::Ptr Klasse zu verwenden.

+0

Als Update zu meiner Frage: Zur Laufzeit bekomme ich einen 'Segmentation Fault' Fehler in der' dynamic_cast' Zeile (mit normalen Zeigern anstelle von opencv Ptr). Kann mir jemand helfen, die dynamische Besetzung mit dem opencv Ptr zu machen? – Seastar

Antwort

4

Ja, es gibt eine openCV-Alternative von dynamic_cast<T>(), die speziell für cv::Ptr geschrieben wurde. Es heißt ... dynamicCast(): D Es gibt auch analoge Alternativen zu Const Cast und Static Cast für diese Angelegenheit.

+0

Aaaah, oh Mann, manchmal hilft das gründlich: P Ich habe in der Dokumentation nachgeschaut, aber nur das statische cast:/Vielen Dank! – Seastar

+0

Kein Problem, froh, dass ich helfen konnte;) Vorsicht! – KjMag

Verwandte Themen