我正在使用Visual Studio 2010和OpenCV 3.0。我試圖訓練SVM並將其保存到文件中,但是我遇到了問題。培訓SVM並將其與OpenCV 3.0保存在一起
我的目的是提取一些圖像的HOG特徵並與它們一起訓練SVM。一切似乎是正確的,但是當我嘗試將模型保存在一個XML文件,我得到了以下錯誤:
Unhandled exception in 0x000007fefd9bb16d (KernelBase.dll) in TrainSVM.exe: Exception de MICROSOFT C++: cv::Exception at memory location 0x0026e1b0.
然後這是在控制檯顯示:
OpenCV Error: Parsing error (SVM model data is invalid, check sv_count, var_* an d class_count tags) in cv::ml::SVMImpl::write, file C:\builds\master_PackSlave-w in64-vc12-shared\opencv\modules\ml\src\svm.cpp, line 2027
的錯誤似乎當SVM未被正確訓練時出現,但我不明白我的失敗位置,因爲線
svm->train(auxResult)
結果爲「true」。
我檢查了圖像,它們裝載正確,有人可以幫我嗎?
在此先感謝。
下面是代碼:
String imagesPathPos = "Positivas/*.jpg"; // it has filters, too !
vector<String> fp;
glob(imagesPathPos, fp);
int tamaño = fp.size();
std::vector<cv::Point> positions;
positions.push_back(cv::Point(0,0));
std::vector<float> descriptor;
Ptr<TrainData> auxResult;
for (size_t i=0; i<fp.size(); ++i)
{
string nameFile = fp[i];
Mat img = imread(fp[i]);
cv::Mat grayImg;
cvtColor(img, grayImg, COLOR_BGR2GRAY);
hog.compute(grayImg,descriptor,winStride,trainingPadding,positions);
Mat auxDescriptor = cv::Mat(descriptor);
Mat descriptorMat(1,auxDescriptor.rows,CV_32FC1);
transpose(auxDescriptor, descriptorMat);
trainingData.push_back(descriptorMat);
trainingLabels.push_back(labelPositive);
}
String imagesPathNeg = "Negativas/*.jpg";
vector<String> fn;
glob(imagesPathNeg, fn, true);
for (size_t i=0; i<fn.size(); i++)
{
Mat img = imread(fn[i]);
cv::Mat grayImg;
cvtColor(img, grayImg, COLOR_BGR2GRAY);
hog.compute(grayImg,descriptor,Size(),Size(),positions);
Mat auxDescriptor = cv::Mat(descriptor);
Mat descriptorMat(1,auxDescriptor.rows,CV_32FC1);
transpose(auxDescriptor, descriptorMat);
trainingData.push_back(descriptorMat);
trainingLabels.push_back(labelPositive);
}
auxResult = TrainData::create(trainingData, type, trainingLabels);
svm->train(auxResult);
svm->save("output.xml");
@Noripsni我看到你發佈[這裏](http://stackoverflow.com/questions/30727369/loading-pretrained-opencv-yml-in-java)類似的錯誤,你有解決它嗎? – JoseleMG