openCV SVM

Author : 퓨림노 / Date : 2013.01.25 16:45 / Category : before/Develop

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 정보를 담자. 

 - 하는 방법은 찾아보기!


전체 소스코드 - 열어보자


더보기



저작자 표시 비영리 동일 조건 변경 허락
신고

'before > Develop' 카테고리의 다른 글

[openGL] openGL with C++  (0) 2013.02.26
[ubuntu] postfix mail server setting  (11) 2013.02.22
openCV SVM  (0) 2013.01.25
[ubuntu/windows] 멀티부팅시 grub rescue  (0) 2013.01.10
[Java] Class TYPE 알아내기  (0) 2013.01.08
[android/Layout] FrameLayout 사용방법  (0) 2013.01.07

Tags : , ,

Blog Information

퓨림노

앞으로 블로그에 markdown+dropbox를 이용하여 포스팅 예정중!!

Search

Statistics

  • Total : 455,012
  • Today : 41
  • Yesterday : 120

Archives

Copyright © http://vbflash.net All Rights Reserved
Designed by CMSFactory.NET