gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:06:48 24 4
gpt4 key购买 nike

我正在尝试在 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/

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