Статья: Реализация метода главных компонент с помощью библиотеки OpenCV
userData – указатель на структуру для работы с памятью.
avg - (выход функции) усредненное изображение эталонов
coeffs - (выход функции) коэффициенты разложения (?)
Функция, вычисляет проекцию исследуемого изображения на пространство собственных объектов:
void cvEigenProjection( void* input_vecs, int eigenvec_count, int io_flags, void* userdata, float* coeffs, IplImage* avg, IplImage* proj ),
где
input_vec - указатель на массив собственных объектов (изображения глубиной 32 бит)
eigenvec_count – число собственных объектов
io_flags – флаги ввода/вывода. Для работы с памятью.
userdata – указатель на структуру для работы с памятью.
coeffs - коэффициенты разложения (?)
avg - усредненное изображение эталонов
proj - проекция исследуемого изображения на пространство собственных объектов
В полученной проекции имеет смысл убрать излишние компоненты (например, с помощью функции cvThreshold – отсечение по порогу). Далее полученный результат можно сравнивать с эталонами, для принятия решения. Способов сравнения много, это может быть, например, минимальное расстояние (Евклидово) или корреляция с эталонами.
Текст программы
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "cxcore.h"
#include "cv.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
IplImage **Objs, *Pro, *Object;
int obj_number=3;
HINSTANCE highgui,cv,cvaux;
IplImage* (__stdcall *cvLoadImage)( const char* filename, int iscolor);
int (__stdcall *cvSaveImage)( const char* filename, const CvArr* image);