티스토리 뷰

OpenCV

[Kinect with OpenCV] OpenNI 라이브러리 연동

생각많은 소심남 2012. 7. 5. 14:49

지난 포스트에선 워낙 뻘짓을 많이 했습니다. 거기에도 언급을 했었지만 굳이 64bit에서만 동작시킬 것이 아니라면 64bit용 옵션을 따로 지정할 필요가 없습니다. 그냥 인터넷에 공개되어 있는 OpenCV 연동 방법을 사용하면 됩니다. 


 자 이제 할것을 찾아보니 OpenNI와 OpenCV를 같이 사용하는 방법을 소개하고자 합니다. 

사실 OpenCV 2.4.1부터는 OpenNI지원 라이브러리가 아예 포함되어 있습니다. 따라서 그 라이브러리와 해당 Example코드를 사용하려면 cmake를 사용해서 추가하면 됩니다. 참고는 http://docs.opencv.org/doc/user_guide/ug_highgui.html 여기의 내용을 참고해서 작성합니다. 

 자 우선 OpenCVBuild라는 폴더와 test폴더를 C드라이브 상에 만듭니다. 여기서 test는 OpenCV를 cmake를 통해서 만든 결과물을 넣는 폴더가 되고 OpenCVBuild는 그 만든 결과물중에서 필요한 라이브러리와 include 파일만 뽑아서 따로 저장할 목적으로 만듭니다.

 우선 cmake를 통해 OpenCV를 해당 컴파일러에 맞춰서 수행하면 아래쪽에 다음과 같은 항목이 있습니다.



잘보시면 WITH_OPENNI라는 항목이 있습니다. 이 부분을 체크해주시고 Generate를 시키면 정상적으로 test폴더안에 OpenCV에 openNI를 적용시킨 파일들이 생성됩니다. 물론 예제를 쓰고 싶으신 분이라면 Example 부분을 추가로 체크해서 넣으시면 되겠지요. Generate를 시킨 후에 보면 폴더안에 OpenCV라는 Solution 파일이 있습니다. Visual Studio를 통해서 열면 여러 파일들을 읽어오게 되는데 그 상태에서 Build를 하시면 됩니다.


(*참고로 64bit상에서 OpenCV와 OpenNI를 연동하는 방법은 조금 까다롭습니다. cmake 파일안에 폴더를 지정해줘야 하는데 일종의 버그때문에 제대로 폴더 변화를 인식하지 못합니다. https://code.ros.org/trac/opencv/ticket/1339 글을 참고하셔서 cmake 파일을 수정하시고 위와 같은 동작을 취하시기 바랍니다.)



프로젝트가 60개 정도 뜹니다. 기타 옵션을 선택하셨거나 빼셨으면 숫자는 틀리게 될겁니다. 아무튼 원하는 모드로 Build를 하시면 되는데 저는 어떤 걸 할지 몰라서 Release 모드와 debug 모드를 둘다 수행했습니다. 그러면 결과물이 test폴더안에 생성될 겁니다. 여기서 취해야 할것은 Bin폴더와 lib 폴더안에 있는 겁니다. 두 과정을 모두 수행하셨으면 아마 폴더안에 라이브러리와 dll 파일이 생성되어 있을겁니다. 이걸 맨처음에 생성했던 OpenCVBuild 폴더안에 삽입합니다. 

 그 다음 원래의 OpenCV 폴더에서 include 폴더를 복사해서 OpenCVBuild 폴더안에 삽입해줍니다. 그러면 OpenCVBuild 폴더안에는 다음의 폴더들이 있게 될겁니다.




다음으로 할 작업은 환경변수설정입니다. 내컴퓨터 - 속성- 고급 시스템 설정으로 들어가면 시스템 설정에서 환경변수 설정항목이 있습니다. 여기서 OpenNI에 관한 환경변수와 OpenCVBuild에 대한 것, 그리고 PrimeSense에 대한 것을 정의해줘야 합니다. 


OPEN_NI_BIN - C:\Program Files\OpenNI\Bin

OPEN_NI_INCLUDE - C:\Program Files\OpenNI\Include

OPEN_NI_INSTALL_PATH - C:\Program Files\OpenNI\

OPEN_NI_LIB - C:\Program Files\OpenNI\Lib

OPENCVROOT - C:\OpenCVBuild

XN_NITE_INSTALL_PATH - C:\Program Files\PrimeSense\NITE\


이렇게 지정해주면 됩니다.

이제 시스템적으로 설정해주는 것은 끝났습니다. VisualStudio상에서 프로젝트에 관한 설정만 해주면 됩니다. 

우선 C++ 프로젝트를 임의로 하나 생성해줍니다. 그 후에 프로젝트의 속성을 들어가면 openCV설정때와 마찬가지로 lib파일이나 include파일을 추가해야 합니다. 다른게 있다면 OpenNI라이브러리를 추가시켜야 하기 때문에 그에 대한 것도 추가시켜야 하겠지요. 일단 VC++의 include 파일은 다음과 같이 지정해줍니다.




아까 환경변수 지정한대로 삽입해주면 되겠지요. 저는 OpenCV는 이전에 썼기 때문에 그대로 놔두고 있습니다. 앞에서 한대로라면 $(OPENCVROOT)로 사용해주면 됩니다. 그 다음은 library 폴더 지정입니다. 




저는 Release모드로 짤 것이기 때문에 해당 라이브러리 폴더를 추가했습니다. 마지막으로 수정해줄 부분은 linker 의 input 부분입니다.



참고로 어제부로 OpenCV버전이 2.4.2로 올라갔습니다. 따라서 dll 파일도 확인해보시면 242로 끝날겁니다. 그건 bin폴더를 잘 확인해보시고 추가시키면 됩니다. 참고로 OpenNI를 사용하기 위해서는 마지막의 두개 lib 파일도 추가해야 합니다. 


이제 끝입니다. 해당 폴더에 예제 파일을 하나 추가해봅시다. 원래의 OpenCV폴더의 Sample 폴더를 찾아보면 cpp 안에 Openni_capture.cpp 파일이 있습니다. 이걸 추가하고 실행시켜서 제대로 동작이 되는지 확인하면 됩니다.



짠! 이렇게 됩니다. 이제 프로그래밍만 열심히 하시면 됩니다.

댓글