CV2011. 8. 22. 11:37

Learning OpenCV 책에 보면 

전 배경 분리 파트에서

code book 방식과

find connected component 방식에 대한 예제 코드가 나온다.

이는 Contour 관련 라이브러리를 어떻게 사용해야 할지 보여주는 

일종의 가이드라인(?) 처럼 생각하면 좋을듯하다.


이중 연결요소를 찾는 방식을 C코드로 옮겨 보았다.


헤더파일
 

소스파일


이를 대충 응용하면 다음과 같다.

 


이런식으로 원래 전경이 엣지만 나오거나 하는 경우


이런식으로 뚜렷하게 외곽선을 찾고 분리가 된다.

이떄 각각은 다른 객체로 인식하게 되는데


즉 그냥 엣지를 찾고 그안을 채우는 정도가 아니라 각각의 객체를 분리해내고

인식하는 것이다.



그러면 이 find connected component 방법은 opencv 에 없을까??


아니다. cvaux 라이브러리에 있다.

// 헤더파일 cvaux.h


인자가 거의 유사함을 알 수 있을 것이다. 그럼 뭐가 다른 것일까??

OpenCV 라이브러리에서 src 폴더 -> cvaux 폴더 에서 잘 찾아보면

cvbgfg_common.cpp 라는 구현파일이 있다. 여기에 존재한다.


즉 각 외곽선의 무게중심과 바운딩 박스를 구하는 부분만 빠져 있는 것이다.

이 부분은 CvSeq* 를 받아서 알아서 응용하면 될 것이다.

개인적으로 OpenCV 라이브러리를 될 수 있는한 사용하는 것이 좋다고 생각한다.

Posted by 멍충한아싸

댓글을 달아 주세요

  1. 질문쟁이

    성대아싸님 정보감사합니다..^^
    그런데 의문점이 있어서요...책에보면 codebook에서 전경 배경 따로분리한걸가지고 fcc에 적용해주는거라고
    나온것같은데요(제가 c,c++,opencv입문한지가 한달조금넘어서요..ㅜㅜ 아직 암것도 잘 모릅니다..)
    저렇게 위 영상처럼 박스를 그려주고싶은데 if ( num != NULL)부분에서 num값을 넣으려면 어떻게해야되나요?
    자꾸 else부분으로 빠져버리네요..ㅜㅜ 그래고 저는 차영상으로 외각선만 만들어주어서 fcc적용해봤는데
    성대님처럼 엣지만 나오게 하는 방법도 궁금합니다... 꼭 답변좀 부탁드려요..

    2011.11.09 10:35 [ ADDR : EDIT/ DEL : REPLY ]
  2. num 은 찾은 객체 개수에요, 인자 이름만 봐도 그렇잖아요
    호출하는 측에서 int 형 변수로 선언하고 최대 개수를 지정하고요, 주소값을 넘겨주면
    fcc 함수 동작을 보시면 알겠지만 최대개수를 넘지 않는 선에서 객체를 찾아요

    예를 들면
    {
    CvRect bboxs[3]; // 배열 크기가 3
    int num = 3; // 최대 3개만 찾는다.

    find_connected_components(img,1,4, &num, bboxs,NULL);
    }

    찾을만한 객체가 20개 정도 이미지에 있어도
    최대 개수를 3으로 해놨기 때문에
    3개만 배열에 채워지겠죠


    그리고 저렇게 박스를 그릴려면 따로 그리는거에요,
    객체 개수랑 박스 위치,크기를 배열에 담았으니까
    그릴수 있죠

    2011.11.10 22:12 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 질문쟁이

      성대아싸님 감사합니다..^^
      덕분에 이제 박스까지는 그려지네요..
      앞으로는 이제 추적을해야하는데....
      많은 조언 부탁드립니다..^^

      2011.11.11 10:01 [ ADDR : EDIT/ DEL ]
  3. 컴퓨터학과학생...

    성대아싸님의 이 프로그램을 보고 만들어보고 싶어져서 도전하는데요.... 위 파일 외에 어떤 프로그램소스가 있어야 작동이 되나요??
    캠불러오는거나 차영상같은게 필요한가요? 제가 컴퓨터학과 3학년이긴한대요... 지식이 없다보니 애매해져서요

    2011.11.22 14:53 [ ADDR : EDIT/ DEL : REPLY ]
    • 저건 딱 GMM 만 하는 부분이라서;;

      동영상에서 영상을 불러오는 것을 작성하시고

      영상 하나하나를 위 함수에다가 업데이트를 시켜준다음에

      결과값으로 주는 배열의 사각형 정보들을 이용해서

      사각형 이미지로 출력하는 소스를 작성하시면 됩니다.

      2011.11.22 19:20 신고 [ ADDR : EDIT/ DEL ]
  4. 어부바

    좋은 글 감사합니다.
    항상 잘 보고 있습니다.

    2012.10.31 04:03 [ ADDR : EDIT/ DEL : REPLY ]