c++ - 在 SVM opencv c++ 中标记数据

标签 c++ opencv svm libsvm

我正在尝试在 opencv 中针对使用 SIFT 提取的特征实现 SVM。我已经提取了 2 个不同对象的特征(每个对象具有 10 个不同图像的特征,我总共为一个对象获得了 3000 多个特征)并将这些特征放在一个文件(yaml 文件)中。

我的问题是:我不知道如何标记它们?所以我需要标记这两个文件(正如我所说,每个文件都是 yaml 类型,它包含矩阵 3260*128,第二个对象的第二个 yaml 文件是 3349*128)...

所以请帮我告诉我如何标记这些文件以便以后训练它们...我正在使用 openCV c++..顺便说一下,SVM 的 openCV 代码是基于 LIBSVM

先谢谢你

最佳答案

假设你得到了正确的矩阵,每一行代表一个样本,你可以做的类似于 lakesh 的建议:

Cv::Mat anger, disgust;
// Load the data into anger and disgust
...
// Make sure anger.cols == disgust.cols 
// Combine your features from different classes into one big matrix
int numPostives = anger.rows, numNegatives = disgust.rows;
int numSamples = numPostives+numNegatives;
int featureSize = anger.cols;
cv::Mat data(numSamples, featureSize, CV_32FC1) // Assume your anger matrix is in float type
cv::Mat positiveData = data.rowRange(0, numPostives);
cv::Mat negativeData = data.rowRange(numPostives, numSamples);
anger.copyTo(positiveData);
disgust.copyTo(negativeData);
// Create label matrix according to the big feature matrix
cv::Mat labels(numSamples, 1, CV_32SC1);
labels.rowRange(0, numPositives).setTo(cv::Scalar_<int>(1));
labels.rowRange(numPositives, numSamples).setTo(cv::Scalar_<int>(-1));
// Finally, train your model
cv::SVM model;
model.train(data, labels, cv::Mat(), cv::Mat(), cv::SVMParams());

希望这对您有所帮助。

关于c++ - 在 SVM opencv c++ 中标记数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9830033/

相关文章:

c++ - 是否可以将模板生成的函数作为 f() 和 f<T>()?

c++ - 有什么理由使用旧的 ISO C++ 语言标准吗?

c++ - 删除复制构造函数中的常量

c++ - 对 C++ 从函数返回引用的困惑

opencv - 在 OpenCV 3 中使用 OSVR 相机

python - 在 svm 中预测多类

OpenCV SVM 预测不一致?

Python OpenCV - waitKey(0) 没有响应?

python - 使用 python 的 libsvm 支持具有高维输出的向量回归

recommendation-engine - SVD和SVM有什么区别