最近一直在用matlab和libsvm,发现libsvm库用起来还是很方便的,就是没有模型直接保存到文件和读取模型的matlab接口(C++的接口有)。由于有会用的Opencv等C/C++库,所以数据交换比较麻烦。看了一下libsvm的svm.h、svm.cpp文件,发现有svm_save_model(),svm_load_model()等函数。于是乎用mex小做封装,写了两个matlab可以直接调用的接口。
保存svm model到文件:(savemodel.c)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "svm.h"
#include "mex.h"
#include "svm_model_matlab.h"
void exit_with_help()
{
mexPrintf(
"Usage: savemodel('filename', model);\n"
);
}
int savemodel(const char *filename, const mxArray *matlab_struct)
{
const char *error_msg;
struct svm_model* model;
int result;
model = matlab_matrix_to_model(matlab_struct, &error_msg);
if (model == NULL)
{
mexPrintf("Error: can't read model: %s\n", error_msg);
}
result = svm_save_model(filename, model);
if( result != 0 )
{
mexPrintf("Error: can't write model t