예전에 올린 얼굴을 인식하여 얼굴을 추적하는 카메라를 만들어본 프로젝트입니다. 이 기술은 haarcascade를 이용하여 얼굴을 검출하는데
여기의 소스를 보시면
for(int i = 0; i < faces.length; i++) {
rect(faces[i].x, faces[i].y, faces[i].width, faces[i].height);
}
위와 같은 부분이 있습니다, faces.length는 검출된 부분의 테두리의 길이값이고
faces[i].x는 각각의 좌표값을 의미합니다. faces[0].x라고 할 경우에는 제일 좌측 상단의 x좌표값이고 faces[faces.length].x라고 할 경우에는 우측 하단의 좌표값을 반환하겠죠.
이 소스를 참고하면 원의 중점을 구하는 방법은 쉽게 이해할 수 있으실 겁니다.
수박쨈 2015-05-20 09:28:19
processing내에서 OpenCV를 사용할 경우 이때 OpenCV버전은 1.0버전(초창기 버전)만을 사용하는 것으로 알고 있습니다. 그래서 어느 기술까지 지원해줄 수 있는지는 모르겠습니다.
영상인식쪽은 컴퓨터공학전공쪽에서도 상위 난이도에 속해 많이들 어려워하는 분야이기도 합니다. 그나마 OpenCV가 널리 사용되고 있기는 하지만 그 기술 하나하나를 비전공자가 이해하고 사용하기에는 많은 어려움이 있습니다.(저도 컴퓨터 공학을 전공하였고 OpenCV를 사용해서 해봤지만 난이도 있는 기술이 많이 들어가 전부 다 이해하고 사용하기에는 무리가 있습니다.)
일단 질문에 대해 답을 드리면 원의 모양만을 이용해서 Detecting하는 기술은 아직 제가 알지 못하는 건지 없는건지는 모르겠습니다만 아직까지는 찾지 못했습니다. 다만 원의 모양이 아닌 원의 색과 주변의 색 차이를 이용하여 원의 모양을 검출하는 기술은 있습니다.
Pocessing의 OpenCV를 사용하면 볼 수 있는 예제인 blob detection이라는 기술과 비슷한 기술이라고 보시면 됩니다.
http://yurhyur1.blog.me/50172647486 이 링크처럼 검출이 가능합니다.
원하는 모양을 검출이 가능하면 중심은 쉽게 구할 수 있습니다. 검출하게 되면 보통 검출한 모양의 바깥 사각형 테두리의 길이와 좌측 상단의 좌표값을 구할 수 있습니다.(지원해 주는 멤버함수가 있던것으로 기억합니다....) 테두리를 구하면 /2를 통해 반지름을 구할 수 있고 좌표값에 값을 대입하면 원의 중점은 쉽게 구할 수 있습니다.
원을 검출 가능하다면 원의 중점을 구하는 일은 생각보다 쉽게 해결하실 수 있습니다.