=DeaD= писал(а):А насколько тяжело будет для памяти хранить еще и исходные изображения?
Сейчас реализация алгоритма AVM v0.5 (библиотеки rcg.lib, rcg_vc9.lib) поддерживает три вида данных
(под данными имеется виду пара [образ]->[ассоциированные данные]):
- 32 битовое знаковое целое [long] (.\include\AssociativeMemory32s.h);
- 160 битный массив [CvType160U] (.\include\AssociativeMemory160u.h);
- 192 битный массив [CvType192U] (.\include\AssociativeMemory192u.h).
Так что можно взять, к примеру, тип CvType160U и использовать 16 бит из 160 (тип short) для индекса в массиве указателей на исходные изображения (остальные биты использовать для других нужд).
К примеру, вот так:
- Код: Выделить всё
#include "AssociativeMemory160u.h"
#define cAreaImgTotal 1000
IplImage* iAreaImg[cAreaImgTotal]; // Массив указателей на исходное изображение области интереса
IplImage* InputImg; // Входное изображение
CvAssociativeMemory160U* am; // Указатель на ассоциативную память
int iAreaImgIdx = 0; // Текущий индекс изображения
CvRect InterestArea; // Область интереса
// ...
// Загружаем входное изображение в InputImg и устанавливаем координаты области интереса InterestArea
iAreaImg[iAreaImgIdx] = cvCreateImage(cvSize(InterestArea.width,
InterestArea.height), IPL_DEPTH_8U, 1);
// Копируем изображение из области интереса
cvSetImageROI(InputImg, InterestArea);
cvCopy(InputImg, iAreaImg[iAreaImgIdx]);
cvResetImageROI(InputImg);
// Подготавливаем данные
CvType160U Data;
Data.s[0] = iAreaImgIdx;
//...
// Записываем данные в ассоциативную память
am->Write(InterestArea, &Data);
if(iAreaImgIdx < cAreaImgTotal) { iAreaImgIdx++; }