我目前在C++中實現不同的opencv機器學習工具在同一個類。因此,我有將超類cv::ml::StatModel
的指針向下轉換爲子類cv::ml::SVM
(例如)的問題。動態演員爲opencv cv :: Ptr
在網上教程人們通常認爲的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<T>()
替代?或者有沒有使用opencv指針的經驗,而是使用機器學習API的「正常」C++指針?我想知道我是否會遇到這個實現的問題,因爲通常的做法似乎是使用opencv cv::Ptr
類。
作爲我的問題的更新:在運行時,我''dynamic_cast'行(使用普通指針而不是opencv Ptr)出現'Segmentation Fault'錯誤。任何人都可以幫我做opencv Ptr的動態演員嗎? – Seastar