[英]C++ OpenCV svm train crashes
我有兩個向量:
vector<int> features;
vector<int> labels;
在某些時候,我在程序中填充了一些值。 (兩個向量大小相同)然后,當我想訓練svm
,將向量復制到2個新的cv::Mat
如下所示:
Mat trainMat(features.size(), 1, CV_32FC1);
Mat labelsMat(labels.size(), 1, CV_32FC1);
for (int i = 0; i < features.size(); i++) {
trainMat.at<int>(i, 1) = features.at(i);
labelsMat.at<int>(i, 1) = labels.at(i);
}
然后我創建svm
及其params
:
cv::SVMParams params;
params.svm_type = cv::SVM::C_SVC;
params.kernel_type = cv::SVM::POLY;
params.gamma = 3;
cv::SVM svm;
最后我訓練它:
svm.train(trainMat, labelsMat, Mat(), Mat(), params);
但是,程序崩潰並給出以下錯誤:
Unhandled exception at 0x7484D928 in cvtest.exe: Microsoft C++ exception: cv::Exception at memory location 0x0017F04.
起初,我認為問題出在數據的大小(因為我是在32位上編譯的)。 因此,我僅使用了20個甚至4個樣本進行了測試。 但是,仍然崩潰。 還有什么可能導致內存錯誤?
最后,我發現了問題。 svm.train()
僅接受float
類型的功能,而不接受int
。 我只是改變了vector<int> features;
vector<float> features;
而且有效。
您正在使用CV_32FC1將trainMat和labelMat創建為浮點矩陣,但使用trainMat.at<int>
設置值是錯誤的。 它必須是trainMat.at<float>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.