繁体   English   中英

openCV中的SVM在内存位置抛出“cv :: Exception”

[英]SVM in openCV throws “cv::Exception at memory location”

我正在尝试使用SVM,openCV,C ++和Visual Studio 2008(mfc app)创建一个简单的OCR应用程序。

我的训练样本是机器打印数字(0-9)的二进制图像。 我想使用DAGSVM来解决这个多类问题。 所以我需要创建45个SVM,每个SVM是2类的SVM(SVM(0,1),SVM(0,2)... SVM(8,9))。

事情的进展如下:

SVM的参数:

CvSVMParams params;
params.svm_type    = CvSVM::C_SVC;
params.kernel_type = CvSVM::LINEAR;
params.term_crit   = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6);

类i的训练图像的数据存储在矩阵trainData [i]中(每行是28×28图像的像素,这意味着矩阵具有784个cols)。 在训练每个SVM时,我创建了2个矩阵,称为curTrainData和curTrainLabel。

for (int i = 0; i < 9; i++)
    for (int j = i+1; j < 10; j++)
    {
        curTrainData.create(trainData[i].rows + trainData[j].rows, 784, CV_32FC1);
        curTrainLabel.create(curTrainData.rows, 1, CV_32FC1);

        // merge 2 matrix: trainData[i] & trainData[j]
        for (int k = 0; k < trainData[i].rows; k++)
        {
            curTrainLabel.at<float>(k, 0) = 1.0; // class of digit i
            for (int l = 0; l < 784; l++)
                curTrainData.at<float>(k,l) = trainData[i].at<float>(k,l);
        }
        for (int k = 0; k < trainData[j].rows; k++)
        {
            curTrainLabel.at<float>(k + trainData[i].rows, 0) = -1.0; // class of digit j
            for (int l = 0; l < 784; l++)
            curTrainData.at<float>(k + trainData[i].rows,l) = trainData[j].at<float>(k,l);
        }

        svms[i][j].train(curTrainData, curTrainLabel, Mat(), Mat(), params);
    }

. 我在调用遇到错误。 完整的错误是:

Unhandled exception at 0x75b5d36f in svm.exe: Microsoft C++ exception: cv::Exception at memory location 0x0022af8c..

说实话我并不完全理解在openCV中实现的SVM,我找不到任何使用它们处理图像中对象的例子。

如果有人能告诉我什么是错的,我真的很感激:(

更新09/03 :我错了。 错误来自:

str.Format(_T("Results\trained_%d_%d.xml"), i, j);  
svms[i][j].save(CT2A(str));

str是一个CString变量。

即使我改为:

svms[i][j].save("Results\trained.xml");

我已经创建了文件夹Results和其他文件很好地写入其中(文件方法fopen(),imwrite()...)。 我不知道为什么我不能在svm的这种保存方法中添加文件夹。

如果你使用反斜杠“\\”,你必须改为使用“\\\\”(或者你可以使用前缀“/”)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM