Форум программистов, компьютерный форум CyberForum.ru

MNIST распознавание знаков - C++

Восстановить пароль Регистрация
 
Lis Serebra
Сообщений: n/a
09.01.2013, 23:26     MNIST распознавание знаков #1
учу с++ с opencv. Должна предоставить программу по решению судоку. У меня уже определяется поле, но при попытки работать с MNIST идёт ошибка памяти. Что в этом виновата переменная size я уже поняла. Но не понимаю почему. Код честно взяла отсюда (http://pastebin.com/SzThnTUM) и понимаю не совсем всё. size выходит за рамки размера и даже неправильно высчитывается, но я не понимаю, на что и как поменять. Надеюсь, меня поймут и помогут, потому что добрый профессор послал в интернет, а сдавать уже скоро.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include "stdafx.h"
#include "digitrecognizer.h"
 
bool DigitRecognizer::train(char *trainPath, char *labelsPath)
{
    FILE *fp = fopen(trainPath, "rb");
    FILE *fp2 = fopen(labelsPath, "rb");
 
    if(!fp || !fp2)
        return false;
 
    // Read bytes in flipped order
    int magicNumber = readFlippedInteger(fp);   
    numImages = readFlippedInteger(fp);
    numRows = readFlippedInteger(fp);
    numCols = readFlippedInteger(fp);
 
    // printf("Magic number: %4x\n", magicNumber);
    //printf("Number of images: %d\n", numImages);
    //printf("Number of rows: %d\n", numRows);
    //printf("Number of columns: %d\n", numCols);
 
    fseek(fp2, 0x08, SEEK_SET);
 
    if(numImages > MAX_NUM_IMAGES) numImages = MAX_NUM_IMAGES;
 
    int size = numRows*numCols;
    CvMat *trainingVectors = cvCreateMat(numImages, size, CV_32FC1);
    CvMat *trainingClasses = cvCreateMat(numImages, 1, CV_32FC1);
 
    memset(trainingClasses->data.ptr, 0, sizeof(float)*numImages);
 
    BYTE *temp = new BYTE[size];
    BYTE tempClass=0;
    for(int i=0;i<numImages;i++)
    {
        fread((void*)temp, size, 1, fp);
        fread((void*)(&tempClass), sizeof(BYTE), 1, fp2);
 
        trainingClasses->data.fl[i] = tempClass;
        
        for(int k=0;k<size;k++)
            trainingVectors->data.fl[i*size+k] = temp[k]; ///sumofsquares;
    }
 
    knn->train(trainingVectors, trainingClasses);
    fclose(fp);
    fclose(fp2);
 
    return true;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2013, 23:26     MNIST распознавание знаков
Посмотрите здесь:

Распознавание изображений C++
Распознавание кода C++
C++ Распознавание числа
распознавание текста C++
C++ Определить количество вхождений строки из n знаков в строку из k знаков
C++ Последовательность из цифр, букв и знаков. Подсчитать чего больше и составить строки только из цифр, букв и знаков
Распознавание текста C++
C++ Распознавание образов

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 02:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru