gpt4 book ai didi

OpenCv SVM 输出文件格式

转载 作者:太空宇宙 更新时间:2023-11-03 21:47:37 27 4
gpt4 key购买 nike

我正在实现自己的 SVM,而不是使用 OpenCV 的 svm 类。我想要我的 SVM 用来保存其输出的 XML 文件,如果我愿意的话,将来可以由 OpenCV 的 SVM 加载和使用。我需要为此做什么?

简而言之:OpenCV 使用什么格式来存储其 SVM 输出?

最佳答案

可以按照OpenCV的CvSVM::write函数。

int i, var_count = get_var_count(), df_count, class_count;
const CvSVMDecisionFunc* df = decision_func;

cvStartWriteStruct( fs, name, CV_NODE_MAP, CV_TYPE_NAME_ML_SVM );

write_params( fs );

cvWriteInt( fs, "var_all", var_all );
cvWriteInt( fs, "var_count", var_count );

class_count = class_labels ? class_labels->cols :
params.svm_type == CvSVM::ONE_CLASS ? 1 : 0;

if( class_count )
{
cvWriteInt( fs, "class_count", class_count );

if( class_labels )
cvWrite( fs, "class_labels", class_labels );

if( class_weights )
cvWrite( fs, "class_weights", class_weights );
}

if( var_idx )
cvWrite( fs, "var_idx", var_idx );

// write the joint collection of support vectors
cvWriteInt( fs, "sv_total", sv_total );
cvStartWriteStruct( fs, "support_vectors", CV_NODE_SEQ );
for( i = 0; i < sv_total; i++ )
{
cvStartWriteStruct( fs, 0, CV_NODE_SEQ + CV_NODE_FLOW );
cvWriteRawData( fs, sv[i], var_count, "f" );
cvEndWriteStruct( fs );
}

cvEndWriteStruct( fs );

// write decision functions
df_count = class_count > 1 ? class_count*(class_count-1)/2 : 1;
df = decision_func;

cvStartWriteStruct( fs, "decision_functions", CV_NODE_SEQ );
for( i = 0; i < df_count; i++ )
{
int sv_count = df[i].sv_count;
cvStartWriteStruct( fs, 0, CV_NODE_MAP );
cvWriteInt( fs, "sv_count", sv_count );
cvWriteReal( fs, "rho", df[i].rho );
cvStartWriteStruct( fs, "alpha", CV_NODE_SEQ+CV_NODE_FLOW );
cvWriteRawData( fs, df[i].alpha, df[i].sv_count, "d" );
cvEndWriteStruct( fs );
if( class_count > 1 )
{
cvStartWriteStruct( fs, "index", CV_NODE_SEQ+CV_NODE_FLOW );
cvWriteRawData( fs, df[i].sv_index, df[i].sv_count, "i" );
cvEndWriteStruct( fs );
}
else
CV_ASSERT( sv_count == sv_total );
cvEndWriteStruct( fs );
}
cvEndWriteStruct( fs );
cvEndWriteStruct( fs );

下面是创建 CvFileStorage 并将其保存到磁盘的方法:

const char* filename = "/xxx/yyy/zzz";
const char* modelname = "svm";
CvFileStorage* fs = cvOpenFileStorage(filename, 0, CV_STORAGE_WRITE);
if (fs) {
write(fs, modelname);
}
cvReleaseFileStorage(&fs);

通过这种方式,您可以选择将模型保存为 XML 或 YAML 格式,并使用 CvSVM::read() 加载模型文件。希望这会有所帮助。

关于OpenCv SVM 输出文件格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14806448/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com