Created
August 10, 2019 12:20
-
-
Save prostoiChelovek/b80c0070292de590e97f7e711f757ad1 to your computer and use it in GitHub Desktop.
opencv SMV testing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <opencv2/opencv.hpp> | |
#include <opencv2/dnn.hpp> | |
#include <opencv2/face.hpp> | |
#include <opencv2/ml.hpp> | |
using namespace std; | |
using namespace cv; | |
int main() { | |
cv::Ptr<cv::ml::SVM> classifier; | |
classifier = cv::ml::SVM::create(); | |
classifier->setType(cv::ml::SVM::C_SVC); | |
classifier->setKernel(cv::ml::SVM::LINEAR); | |
classifier->setTermCriteria(cv::TermCriteria(cv::TermCriteria::MAX_ITER, 100, 1e-6)); | |
int labels[4] = { 1, 1, -1, -1 }; | |
float trainingData[4][256] = { | |
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 17, 12, 18, 22, 25, 21, 19, 11, 15, 5, 7, 6, 3, 6, 5, 14, 48, 177, 261, 135, 51, 24, 21, 12, 12, 19, 12, 8, 4, 10, 11, 9, 12, 7, 9, 5, 7, 10, 18, 22, 22, 49, 34, 7, 4, 4, 4, 3, 2, 1, 4, 2, 7, 3, 3, 4, 3, 5, 4, 9, 5, 2, 2, 3, 6, 2, 2, 9, 6, 5, 2, 7, 7, 14, 29, 34, 34, 56, 54, 99, 139, 160, 466, 237, 230, 232, 247, 222, 184, 267, 285, 399, 420, 416, 432, 323, 425, 422, 313, 424, 471, 960, 2072, 966, 1467, 372, 230, 307, 706, 1096, 945, 2138, 650, 510, 710, 520, 126, 94, 113, 46, 43, 20, 3, 5, 7, 5, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0}, | |
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 17, 12, 18, 22, 25, 21, 19, 11, 15, 5, 7, 6, 3, 6, 5, 14, 48, 177, 261, 135, 51, 24, 21, 12, 12, 19, 12, 8, 4, 10, 11, 9, 12, 7, 9, 5, 7, 10, 18, 22, 22, 49, 34, 7, 4, 4, 4, 3, 2, 1, 4, 2, 7, 3, 3, 4, 3, 5, 4, 9, 5, 2, 2, 3, 6, 2, 2, 9, 6, 5, 2, 7, 7, 14, 29, 34, 34, 56, 54, 99, 139, 160, 466, 237, 230, 232, 247, 222, 184, 267, 285, 399, 420, 416, 432, 323, 425, 422, 313, 424, 471, 960, 2072, 966, 1467, 372, 230, 307, 706, 1096, 945, 2138, 650, 510, 710, 520, 126, 94, 113, 46, 43, 20, 3, 5, 7, 5, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0}, | |
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 1551, 380, 213, 185, 227, 896, 1016, 276, 251, 198, 480, 350, 277, 456, 712, 613, 1670, 896, 1008, 3243, 4083, 2160, 894, 284, 19, 19, 27, 70, 5, 0, 0, 0, 0, 0, 0, 0}, | |
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 1551, 380, 213, 185, 227, 896, 1016, 276, 251, 198, 480, 350, 277, 456, 712, 613, 1670, 896, 1008, 3243, 4083, 2160, 894, 284, 19, 19, 27, 70, 5, 0, 0, 0, 0, 0, 0, 0} | |
}; | |
Mat trainingDataMat(4, 256, CV_32F, trainingData); | |
Mat labelsMat(4, 1, CV_32SC1, labels); | |
classifier->train(trainingDataMat, ml::ROW_SAMPLE, labelsMat); | |
// 1 | |
Mat sampleMat1 = (Mat_<float>(1,256) << 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 17, 12, 18, 22, 25, 21, 19, 11, 15, 5, 7, 6, 3, 6, 5, 14, 48, 177, 261, 135, 51, 24, 21, 12, 12, 19, 12, 8, 4, 10, 11, 9, 12, 7, 9, 5, 7, 10, 18, 22, 22, 49, 34, 7, 4, 4, 4, 3, 2, 1, 4, 2, 7, 3, 3, 4, 3, 5, 4, 9, 5, 2, 2, 3, 6, 2, 2, 9, 6, 5, 2, 7, 7, 14, 29, 34, 34, 56, 54, 99, 139, 160, 466, 237, 230, 232, 247, 222, 184, 267, 285, 399, 420, 416, 432, 323, 425, 422, 313, 424, 471, 960, 2072, 966, 1467, 372, 230, 307, 706, 1096, 945, 2138, 650, 510, 710, 520, 126, 94, 113, 46, 43, 20, 3, 5, 7, 5, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0); | |
float result = classifier->predict(sampleMat1); | |
cout << result << endl; | |
// -1 | |
Mat sampleMatNeg = (Mat_<float>(1,256) << 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 1551, 380, 213, 185, 227, 896, 1016, 276, 251, 198, 480, 350, 277, 456, 712, 613, 1670, 896, 1008, 3243, 4083, 2160, 894, 284, 19, 19, 27, 70, 5, 0, 0, 0, 0, 0, 0, 0); | |
float resultNeg = classifier->predict(sampleMatNeg); | |
cout << resultNeg << endl; | |
// 1 | |
Mat sampleMatPos = (Mat_<float>(1,256) << 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 17, 12, 18, 22, 25, 21, 19, 11, 15, 5, 7, 6, 3, 6, 5, 14, 48, 177, 261, 135, 51, 24, 21, 12, 12, 19, 12, 8, 4, 10, 11, 9, 12, 7, 9, 5, 7, 10, 18, 22, 22, 49, 34, 7, 4, 4, 4, 3, 2, 1, 4, 2, 7, 3, 3, 4, 3, 5, 4, 9, 5, 2, 2, 3, 6, 2, 2, 9, 6, 5, 2, 7, 7, 14, 29, 34, 34, 56, 54, 99, 139, 160, 466, 237, 230, 232, 247, 222, 184, 267, 285, 399, 420, 416, 432, 323, 425, 422, 313, 424, 471, 960, 2072, 966, 1467, 372, 230, 307, 706, 1096, 945, 2138, 650, 510, 710, 520, 126, 94, 113, 46, 43, 20, 3, 5, 7, 5, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0); | |
float resultPos = classifier->predict(sampleMatPos); | |
cout << resultPos << endl; | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment