SVM Memory Exception

asked 2015-02-01 07:43:11 -0600

vm323 gravatar image

updated 2015-02-01 08:02:26 -0600

Hello, I'm working on SVM train model for more than 2 classes. I was storing the result of predict in a mat variable and was getting same output for any sample i test for. I made some changes in the dataset, now im getting a memory exception. Please help me, i'm new to opencv.

No of classes : 5 Size : Trained Data set (row x col) Class 1 : 76636 Class 2 : 323636 Class 3 : 8633*36 Class 4 : 5499 * 36 Class 5 : 8010 * 36

Labels : Class 1 : 1 Class 2 : 2 Class 3 : 3 Class 4 : 4 Class 5 : 5

My Code :

#include<opencv\cv.h>
#include<opencv\highgui.h>
#include<stdio.h>
#include <iostream>
#include<string>
#include <fstream>
#include<stdlib.h>
//#include <stdafx.h>
#include <windows.h>
#include <tchar.h>
#include <sstream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/ml/ml.hpp>

using namespace cv;
using namespace std;
Mat x[100];
int j;

// Dataset is imported 
void importData()
{

    j=0;
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind;
    TCHAR  *directory = TEXT("C:\\Users\\User\\Documents\\Visual Studio 2010\\Projects\\output");
    TCHAR patter[MAX_PATH];
        TCHAR fileName[MAX_PATH];
    memset(patter, 0x00, MAX_PATH);
    _stprintf(patter, TEXT("%s\\*.txt"), directory);
    hFind = FindFirstFile(patter, &FindFileData);
    if (hFind == INVALID_HANDLE_VALUE) 
    {
        printf ("FindFirstFile failed (%d)\n", GetLastError());

    } 
    else 
    {
        do
        {
            //ignore current and parent directories
            if(_tcscmp(FindFileData.cFileName, TEXT("."))==0 || _tcscmp(FindFileData.cFileName, TEXT(".."))==0)
                continue;

            if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            {
                //ignore directories
            }
            else
            {
                //list the Files

                _tprintf (TEXT("%s\n"), 

                    FindFileData.cFileName);
                                 memset(fileName, 0x00, sizeof(fileName));
                                 _stprintf(fileName, TEXT("%s\\%s"), directory, FindFileData.cFileName);
                                // FILE *fptr = fopen(fileName, "r");
                                 //do here whatever you want to do..
                                 //fclose(fptr);
                                 FileStorage fs;
                                string pa(fileName);

                                // cout<<pa;
                                 fs.open(pa,FileStorage::READ);

                                pa=pa.substr(pa.find_last_of("/\\")+1);
                                pa=pa.substr(0,pa.find_last_of("."));
                            //  cout<<" >> " << pa << "\n" ;
    fs["output"+pa] >> x[j] ;
    //cout<<pa<<":"<<x[j].rows << "x" << x[j].cols <<"\n";
    fs.release();
    j++;        
            }
        }while (FindNextFile(hFind, &FindFileData));
        FindClose(hFind);
    }

}

// Main function which handles all functions
int main(int argc, char** argv[])
{ 
    importData();
    int i=0,k=0;
    /*//
    Mat R = Mat_<double>::zeros(3, 3);
    cout<<R;
    FileStorage fs;
    fs.open("new.txt",FileStorage::WRITE);
    fs<<"new" << R;
    fs.release();
    fs.open("new.txt",FileStorage::READ);
    fs["new"]>>x[0];
    */
    Mat n[10],z[10];
    int l=0;
    while(l<5)
    {

        if(i%10==0)
        {
            x[i].copyTo(n[l]);
        }
        else if(i%10==1)
        {
            x[i].copyTo(z[k]);

        }
        else if(i%2==0)
        {
            vconcat(n[l],x[i],n[l]);
        //  cout<<"row:"<<n[l].rows<<"\n";
        }
        else
        {
            vconcat(z[k],x[i],z[k]);
       //   cout<<"row:"<<n[l].rows<<"\n";


        }
        i++;
        // Increment the class
        if(i%10==0)
        {
            l++;
            k++;
        }

    }
//  cout<<n[0].rows << " x " << n[0].cols << "\n";
//  cout<<n[1].rows << " x " << n[1].cols;
    Mat m[10];
    for(int r =0; r<l;r++)
    {
        Mat A(n[r].rows, 1, DataType<float>::type);
        for(int s=0;s<n[r].rows;s++)
        {
            A.at<float>(s,0)=r ...
(more)
edit retag flag offensive close merge delete