openCV SVM

SVM C/C++ code


>> 주의사항

 - svm 에 초기값을 제대로 넣어주어야 결과가 제대로 나온다. 

   dataclass 의 type 수를 2개만 줄건지 그 이상 줄건지 확실히 하도록 하자.  그렇지 않으면 svm 의 predict() 함수의 return 값이 원하는 값이 아닐 거다!


>> 코드 


- 초기화

// Set up training data
float labels[4] = {1.0, 2.0, 2.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);

-  train & predict



SVM svm;
	svm.train(trainingDataMat, labelsMat, Mat(), Mat(), params);

	Vec3b green(0,255,0), blue (255,0,0);
	// Show the decision regions given by the SVM
	for (int i = 0; i < image.rows; ++i)
		for (int j = 0; j < image.cols; ++j)
		{
			Mat sampleMat = (Mat_(1,2) << i,j);
			float response = svm.predict(sampleMat);
			//cout << "response =" << response << endl;
			
			if ( response == 1)
				image.at(j, i)  = green;
			else if (response == -1)
				image.at(j, i)  = blue;
		}
	}

... 

predict() 함수


float response = svm.predict(sampleMat, true);

위의 함수에서 2번째 parameter 로 true 값을 줄 경우 distance 값이 출력. ( distance 값을 출력하기 위해서는 class type=2 이어야 함)



>> 추가 설명

 - 이미지를 training 하고 SVM 을 이용하여 classification 을 하고 싶을 때에는 HOG, sift 등 feature 정보를 담자. 

 - 하는 방법은 찾아보기!


전체 소스코드 - 열어보자




'Library > opencv' 카테고리의 다른 글

[opencv 2.4.3] Image ROI  (0) 2013.04.15
lib svm  (0) 2013.01.25
[opencv] Mat ROI  (0) 2013.01.21
HOG, SVM  (0) 2013.01.16
opencv font  (0) 2012.11.23

댓글

Designed by JB FACTORY