簡體   English   中英

C ++ OpenCV svm火車崩潰

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM