1. Создание распознавалки как класса с созданием внутри всех необходимых структур данных;
- Код: Выделить всё
#include "AssociativeMemory.h"
CvAssociativeMemory32S* pAM = new CvAssociativeMemory32S;
...
if(mpAM) { delete mpAM; }
2. Сохранение всей внутренней структуры в файл, загрузка из файла.
Заголовочный файл: "AssociativeMemory.h"
- Код: Выделить всё
// Saving of recognition data
bool Save(char* aFileName, bool aSaveWithoutOptimization = false);
// Loading of recognition data
bool Load(char* aFileName);
3. Добавление образа для распознавания.
- Код: Выделить всё
// Set an image for processing
void SetImage(const void* apSrcImg, const void* apObjMaskImg = NULL);
// Writing to associative memory cell
void Write(CvRect aInterestArea, long* apData, bool aDeepLearning = true);
4. Распознавание всех образов, которые знаем, на заданном изображении.
- Код: Выделить всё
// Set an image for processing
void SetImage(const void* apSrcImg, const void* apObjMaskImg = NULL);
// Object recognition
void ObjectRecognition(CvRcgAMFunc32S RcgAMFunc, void *args = NULL);
void ObjectTracking(CvRcgAMFunc32S RcgAMFunc, void *args = NULL,
bool aTrainingDuringTracking = true,
double aSimilarityUpTrd = cAM_SimilarityUpTrd,
double aSimilarityDnTrd = cAM_SimilarityDnTrd);
5. Распознавание 1 вида образов, который знаем, на заданном изображении.
- Код: Выделить всё
// Definition of associative memory operation function
typedef bool (*TYPE_AMFunc32S)(CvSize aRcgMxSize, short* apRcgMx, long* apData,
uint64 aIndex, uint64 aHitCounter,
int aContainBasesTotal, short aLevel, void* args);
Можно просмотреть все распознанные объекты в функции call-back (RcgAMFunc) и выбрать только те объекты, у которых необходимый нам индекс объекта (long* apData).
6. Удаление образа из распознаваемых.
Такого пока что нету. У каждого ассоциативного ядра есть свой уникальный индекс (uint64 aIndex), так что несложно будет сделать удаление ядра с заданным индексом.
Итог: необходимо добавить один метод DeleteAssociativeBase(uint64 aIndex) в класс CvAssociativeMemory32S.