我正在尝试使用OpenCV cvsvm训练SVM分类器。我有 68 行和 2772 列,第一个 34 行对应于正样本,其余 34 行对应负面样本。这是我的代码。
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/ml/ml.hpp>
#include "opencv2/opencv.hpp"
using namespace cv;
using namespace std;
int main()
{
bool is_recognizedcharacter = false;
vector<float> values, values1, values2, values3, values4;
FileStorage fs2("/home/shahnawaz/Desktop/opencv-svm/vecSupport.yml", FileStorage::READ);
FileStorage fs3("/home/shahnawaz/Desktop/opencv-svm/vecSupport1.yml", FileStorage::READ);
FileStorage fs4("/home/shahnawaz/Desktop/opencv-svm/vecSupport2.yml", FileStorage::READ);
FileStorage fs5("/home/shahnawaz/Desktop/opencv-svm/vecSupport3.yml", FileStorage::READ);
//FileStorage fs6("/home/shahnawaz/Desktop/opencv-svm/vecSupport4.yml", FileStorage::READ);
fs2["vector"]>>values;
fs3["vector"]>>values1;
fs4["vector"]>>values2;
fs5["vector"]>>values3;
//fs6["vector"]>>values4;
//fill with data
values.insert(values.end(), values1.begin(), values1.end());
values.insert(values.end(), values2.begin(), values2.end());
fs2.release();
fs3.release();
fs4.release();
float arr[188496];
float car[2772];
float noncar[2772];
// move positive and negative to arr
std::copy(values.begin(), values.end(), arr);
std::copy(values3.begin(), values3.end(), car);
//std::copy(values4.begin(), values4.end(), noncar);
// get a sample for testing
for (unsigned int i = 0; i < 2772;i++)
{
noncar[i] = arr[182952+i];
}
float labels[68];
for (unsigned int s = 0; s < 68; s++)
{
if (s<34)
labels[s] = +1;
else
labels[s] = -1;
}
Mat labelsMat(68, 1, CV_32FC1, labels);
Mat trainingDataMat(68,2772, CV_32FC1, arr);
// Set up SVM's parameters
CvSVMParams params;
params.svm_type = CvSVM::C_SVC;
params.kernel_type = CvSVM::LINEAR;
params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6);
// Train the SVM
CvSVM SVM;
SVM.train(trainingDataMat, labelsMat, Mat(), Mat(), params);
Mat matinput(1,2772,CV_32FC1,noncar);
cout<<matinput;
is_recognizedcharacter= SVM.predict(matinput);
cout<<is_recognizedcharacter<<endl;
}
您也可以从图像中看到结构。
问题 对于阴性和阳性测试样品,我得到预测值+1。有人可以帮我解决问题吗?非常感谢你。
P.S:对于matlab svm,它正确地预测了对象。
编辑:请从here
下载yml文件