以上说明的实际例子以及代码
时间: 2023-07-10 13:42:36 浏览: 38
以下是使用Opencv ml svm进行多分类的示例代码:
```C++
#include <opencv2/core.hpp>
#include <opencv2/ml.hpp>
#include <iostream>
using namespace cv;
using namespace cv::ml;
using namespace std;
int main()
{
// 构造训练数据
Mat trainData(12, 2, CV_32FC1);
trainData.at<float>(0, 0) = 1.0; trainData.at<float>(0, 1) = 1.0;
trainData.at<float>(1, 0) = 1.0; trainData.at<float>(1, 1) = 2.0;
trainData.at<float>(2, 0) = 1.0; trainData.at<float>(2, 1) = 3.0;
trainData.at<float>(3, 0) = 2.0; trainData.at<float>(3, 1) = 1.0;
trainData.at<float>(4, 0) = 2.0; trainData.at<float>(4, 1) = 2.0;
trainData.at<float>(5, 0) = 2.0; trainData.at<float>(5, 1) = 3.0;
trainData.at<float>(6, 0) = 3.0; trainData.at<float>(6, 1) = 1.0;
trainData.at<float>(7, 0) = 3.0; trainData.at<float>(7, 1) = 2.0;
trainData.at<float>(8, 0) = 3.0; trainData.at<float>(8, 1) = 3.0;
trainData.at<float>(9, 0) = 4.0; trainData.at<float>(9, 1) = 1.0;
trainData.at<float>(10, 0) = 4.0; trainData.at<float>(10, 1) = 2.0;
trainData.at<float>(11, 0) = 4.0; trainData.at<float>(11, 1) = 3.0;
// 构造标签数据
Mat labels(12, 1, CV_32SC1);
labels.at<int>(0, 0) = 1;
labels.at<int>(1, 0) = 1;
labels.at<int>(2, 0) = 1;
labels.at<int>(3, 0) = 2;
labels.at<int>(4, 0) = 2;
labels.at<int>(5, 0) = 2;
labels.at<int>(6, 0) = 3;
labels.at<int>(7, 0) = 3;
labels.at<int>(8, 0) = 3;
labels.at<int>(9, 0) = 4;
labels.at<int>(10, 0) = 4;
labels.at<int>(11, 0) = 4;
// 构造SVM分类器
Ptr<SVM> svm = SVM::create();
svm->setType(SVM::C_SVC);
svm->setKernel(SVM::LINEAR);
svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 100, 1e-6));
svm->setCovarianceMatrixType(SVM::COVAR_SCALE);
// 训练SVM
Ptr<TrainData> td = TrainData::create(trainData, ROW_SAMPLE, labels);
svm->train(td);
// 构造测试数据
Mat testData(3, 2, CV_32FC1);
testData.at<float>(0, 0) = 1.5; testData.at<float>(0, 1) = 1.5;
testData.at<float>(1, 0) = 2.5; testData.at<float>(1, 1) = 2.5;
testData.at<float>(2, 0) = 3.5; testData.at<float>(2, 1) = 3.5;
// 预测测试数据
Mat predictions;
svm->predict(testData, predictions);
// 输出预测结果
cout << "Predictions:" << endl;
for (int i = 0; i < predictions.rows; i++) {
cout << predictions.at<float>(i, 0) << endl;
}
return 0;
}
```
在这个例子中,我们首先构造了一个包含12个样本的训练集,每个样本有两个特征。然后我们使用一对一方法训练了一个线性SVM分类器,并将其用于预测一个包含3个测试样本的测试集。最终输出了预测结果。
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)