不谈原理,直接暴力地给出代码。
由OpenCV sample的c代码改写。包含读取数据/训练/获得每个特征的重要性/计算样本相似度等操作。
#include "opencv2/core/core_c.h"
#include "opencv2/ml/ml.hpp"
#include <cstdio>
#include <vector>
// This function reads data and responses from the file <filename>
static int
read_num_class_data( const char* filename, int var_count,
cv::Mat &data, cv::Mat &responses )
{
const int M = 1024;
FILE* f = fopen( filename, "rt" );
CvMemStorage* storage;
CvSeq* seq;
char buf[M+2];
float* el_ptr;
CvSeqReader reader;
int i, j;
if( !f )
return 0;
el_ptr = new float[var_count+1];
storage = cvCreateMemStorage();
seq = cvCreateSeq( 0, sizeof(*seq), (var_count+1)*sizeof(float), storage );
for(;;)
{
char* ptr;
if( !fgets( buf, M, f ) || !strchr( buf, ',' ) )
break;