2015년 7월 6일 월요일

제2장)Open CV를 이용한 원검출 - ①

원검출은 저번 포스팅에서의 사각형검출과는 다르게 이미 구현된 함수를 사용하였다.
바로 허프변환으로 나타난 cvHoughCircles라는 함수이다!
> 허프변환이란?
영상에 있는 점들이 이루는 모든직선들 중에서 가장 많이 겹치는 부분을 추출하는 변환이다.

이함수는 gray scale한 영상에서의 윤곽선중 원형인 모양을 골라주는 역할을 한다. 

코드는 다음과같이 간단하다.
먼저 gray scale 영상을 smoothing 시킨다.
허프변환한 시퀀스를 원형이 영상에서 나타내게되면 원형의 모습으로 나타나게 바로 설정하였다.

1
2
3
4
5
6
            cvSmooth(gray, gray, CV_GAUSSIAN, 55);    //스무딩 
            Circle = cvHoughCircles(gray, storage_circle, CV_HOUGH_GRADIENT, 11020025415);    //스무딩하게만든 grayscale영상에서 원을 찾음
                for (int k = 0; k < Circle->total; k++){
                    circle = (float*)cvGetSeqElem(Circle, k);
                    cvCircle(frame, cvPoint(cvRound(circle[0]), cvRound(circle[1])), cvRound(circle[2]), CV_RGB(k * 30, k * 60, k * 60), 380);
                    }
cs
다음과같이 흰 바둑돌을 추출해낼 수가 있다.
하지만 사람이 두는 돌은 흑돌이고 흰돌은 인식하지 못하게해야하므로 흑돌만 인식해야한다. 
이내용에대해서는 다음포스트에서 설명하겠다.




댓글 없음:

댓글 쓰기