在OpenCV中读取MATLAB生成的SVM模型

时间:2015-08-25 13:35:58

标签: c++ matlab opencv svm

我使用matlab生成了SVM模型。现在我想在OpenCV中加载SVM模型。这是我的matlab代码,用于获取SVM模型。

pos_mat = matfile('positve200.mat');             % positve samples
neg_mat = matfile('Negative200.mat');            % negative samples 
postest_mat = matfile('test.mat');               % positive test samples
negtest_mat = matfile('test1.mat');              % negative test samples
negtest_mat1= matfile('Test2.mat');              % negative test samples

posRow  = pos_mat.bigmat;                        % get positve samples
negRow  = neg_mat.bigmatneg;                     % get negative samples
negRow(34,:) = negRow(1,:);

cartestRow = postest_mat.out;             
negtestRow = negtest_mat.negtestsamples;  
negtestRow1 = negtest_mat1.bigmatneg;


group = ones(68,1);
group(35:68) = -1;
t = 35;
for i =1:1:34
    posRow(t,:) = (negRow(i,:));
    t = t+1;
end

xdata = posRow;

SVMModel = fitcsvm(xdata,group);

有人可以帮助我在OpenCV中加载SVM模型,然后使用SVM模型生成的值,类似于hog.cpp中默认人物检测器的值。请参阅以下两个功能。

  • std :: vector cv :: gpu :: HOGDescriptor :: getPeopleDetector48x96()
  • std :: vector cv :: gpu :: HOGDescriptor :: getPeopleDetector64x128()

我希望获得与我自己的SVM分类器类似的值。您可以找到垫文件here

更新 我使用了Beta值,然后将其保存到yaml文件中。我在OpenCV中使用这个yaml文件来检测我训练分类器的对象。这是代码

sv    = SVMModel.IsSupportVector;
alpha = SVMModel.Alpha;
bias  = SVMModel.Bias;
beta  = (SVMModel.Beta)';


fid = fopen(sprintf('%s.yml','vecSupport'),'a');
fprintf(fid,'%s','%YAML:1.0');
fprintf(fid,'\n');
fprintf(fid,'%s','vector: ');
fprintf(fid,'%s','[ ');

for i = 1:1:2772
    fprintf(fid,'%d',beta(i));
    if (i<2772)
    fprintf(fid,'%s',', ');
    end
end
fprintf(fid,'%s',' ]');
fclose(fid);

0 个答案:

没有答案