繁体   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