初始化数据
int width = 512, height = 512;
Mat image = Mat::zeros(height, width, CV_8UC3); 设置训练数据 float labels[4] = {1.0, -1.0, -1.0, -1.0};
Mat labelsMat(4, 1, CV_32FC1, labels);
float trainingData[4][2] = { {501, 10}, {255, 10}, {501, 255}, {10, 501} };
Mat trainingDataMat(4, 2, CV_32FC1, trainingData); SVM初始化 CvSVMParams params;
params.svm_type = CvSVM::C_SVC;
params.kernel_type = CvSVM::LINEAR;
params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6); SVM训练 CvSVM SVM;
SVM.train(trainingDataMat, labelsMat, Mat(), Mat(), params); SVM结果显示Vec3b green(0,255,0), blue (255,0,0);
for (int i = 0; i < image.rows; ++i)
for (int j = 0; j < image.cols; ++j)
{
Mat sampleMat = (Mat_<float>(1,2) << i,j);
float response = SVM.predict(sampleMat);
if (response == 1)
image.at<Vec3b>(j, i) = green;
else if (response == -1)
image.at<Vec3b>(j, i) = blue;
}
// Show the training data
int thickness = -1;
int lineType = 8;
circle( image, Point(501, 10), 5, Scalar( 0, 0, 0), thickness, lineType);
circle( image, Point(255, 10), 5, Scalar(255, 255, 255), thickness, lineType);
circle( image, Point(501, 255), 5, Scalar(255, 255, 255), thickness, lineType);
circle( image, Point( 10, 501), 5, Scalar(255, 255, 255), thickness, lineType);

本文介绍了一个使用支持向量机(SVM)进行图像区域分类的实际案例。通过初始化图像并定义训练数据,包括四个样本点及其标签,实现了基于线性核的支持向量机模型训练,并将训练结果应用于图像上,对每个像素进行预测并根据预测结果绘制不同颜色。

被折叠的 条评论
为什么被折叠?



