0
我想在OpenCV中使用SVM对坐标集进行分类。 例如, 标签1对于{70,80},{94,90},{70,85} 标签-1 {98,89},{99,94},{91,87}如何在2通道Mat中使用OpenCV中的SVM?
在OpenCV提供的例子中,只有一个坐标数据是用于一个节点的 。但是,我想使用坐标集作为 一个节点。我试过用CV_32FC2垫测试。 但是,我认为它不能用于SVM的训练。发生错误。 有人知道如何在这种情况下使用SVM?
int record[3][3][2] = {
{
{ 70, 80 },
{ 94, 90 },
{ 70, 85 }
},
{
{ 83, 90 },
{ 95, 60 },
{ 90, 82 }
},
{
{ 98, 89 }, // 3반 학생1의 성적
{ 99, 94 }, // 3반 학생2의 성적
{ 91, 87 } // 3반 학생3의 성적
}
};
int labels[3] = { 1, -1, -1 };
Mat trainingDataMat(3, 3, CV_32FC2, record);
Mat labelsMat(3, 1, CV_32SC1, labels);
Ptr<SVM> svm = SVM::create();
svm->setType(SVM::C_SVC);
svm->setKernel(SVM::LINEAR);
svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 100, 1e-6));
//! [init]
//! [train]
svm->train(trainingDataMat, ROW_SAMPLE, labelsMat);
我已经理解了你所说的教程代码。它只考虑节点通过x,y坐标的位置。不过,我想考虑点之间的关系。就像在各种数字中找到具体人物一样。所以我需要使用一组坐标作为对象。 –
类似于一袋字吗?对不起,没有经验,我猜行数必须是2的倍数呢? – Micka
cols,.I表示cols的数量应该是2的倍数,每个对象的特征数量必须是固定的? – Micka