티스토리 뷰

OpenCV

[OpenCV] OpenCV with Visual Studio 2010 64bit

생각많은 소심남 2012. 6. 2. 00:22

[2012.7.3]

최신 버전이 2.4.1로 업데이트 되었습니다. 따라서 최신판을 설치하시는 분이라면 라이브러리를 240에서 241로 바꾸어서 첨부시켜야 합니다. 아울러 다음 포스팅은 64bit에서도 동작하는 어플리케이션을 만들고자 함에서 작성한 포스트이기에 단순히 32bit 운영체제를 타겟으로 하시는 분이라면 이 부분은 스킵하시면 좋을 것 같습니다.

---------------------------------------------------------------------------------------------------------------

키넥트를 공부하다 보니까 단순히 키넥트로만 성능이 좋은 어플리케이션을 구현하기가 참 힘듭니다. 특히 손가락 인지같은 기능은 키넥트 공식 SDK에서는 제공하지 않습니다. 물론 지난 포스트들을 보면 야매로 손가락을 탐지하는 문법이 있긴 했지만 본연적으로 손가락 5개를 모두 인식하게 하기 위해서는 영상처리란 분야가 접목되어야 합니다. 제가 요즘에 공부하는 것도 이런 손가락 인지를 통해서 제스쳐를 구현하는 것이기 때문에 이 openCV를 배우지 않을 수가 없더군요.

 그래서 처음부터 설치부터 해나가고자 합니다.

 우선 지금 OpenCV 공식 사이트에 올라간 자료는 2.4.0 버전이 가장 stable한 버전입니다. 이 자료는

http://sourceforge.net/projects/opencvlibrary/ 에서 다운로드 받을 수 있습니다.

 

 

 

이렇게 받은 파일은 하나의 압축파일입니다. 현재 받은 폴더에다가 그대로 압축을 풀게 되면 opencv라는 폴더가 하나 딸랑 있습니다. 이게 전부입니다. 이걸 C 드라이브나 주로 쓰는 드라이브에 옮겨주는 것으로 설치는 끝나게 됩니다. 용량은 한 2기가정도 되네요.

 그런데 문제는 설치가 끝났다는 것이지, 바로 개발에 들어갈 수 있다는 것이 아닙니다. 보통 일반인들이 사용하는 개발툴중에는 여러가지가 있겠지만 가장 보편적으로 사용하는 것이 Visual Studio 일 겁니다. 그런데 다들 프로젝트를 생성해보시면 아시겠지만 해당 기능을 사용하기 위해서는 꼭 라이브러리를 삽입해줘야 합니다. 그냥 단순히 reference만 참조하는 것이 아니라 컴파일시 해당 기능을 사용할 라이브러리를 사전에 추가시켜야 한다는 겁니다. 그 작업을 해주려고 합니다. 우선 VS2010을 실행시키고 C++로 새로운 프로젝트를 생성합니다. 빈 프로젝트를 생성해도 됩니다. 맨처음에는 OpenCV의 라이브러리가 설치된 디렉토리를 이 프로젝트와 연동시켜야 하는데 그건 프로젝트의 속성을 들어가야 할 수 있습니다.

 

 

여기서 Configuration Properties에 VC++ Directories라는 항목이 있습니다. 이중에서 우리가 손봐야 할 내용은 include Directories 입니다. 해당 칸을 누르게 되면 폴더를 선택할 수 있게 됩니다.

 

 

거기서 다음과 같은 경로를 지정해줍니다.

 

 

 다음은 Library Directories를 수정해야 합니다. 위와 마찬가지로 다음과 같이 추가해주시기 바랍니다.

 

 

참고로 저는 VS 2010에 64비트이기 때문에 그에 해당하는 폴더를 선택했습니다. 32비트 운영체제를 쓰시는 분이라면 x64가 아니라 x86폴더의 vc10을 선택해줘야 합니다.

 마지막으로 Linker로 연결시킬 라이브러리를 선언해야 하는데 이부분은 Linker라고 딱 나와 있습니다. 여기서 Input의 additional Dependency를 선택하고 다음을 복사해서 넣어주면 됩니다.

 

 

지금 적어넣은 라이브러리는 openCV에서 제공하는 모든 라이브러리를 포함시킨 겁니다. 물론 필요한 것만 뽑아쓰셔도 됩니다. 간단한 장난을 할정도라면 highgui정도만 들어가도 상관없단 이야기지요. 참고로 지금 이렇게 삽입한 라이브러리는 디버깅 모드에서 사용되는 라이브러리입니다. 컴파일시 릴리즈 모드로 하고 싶은 분이라면 각 파일명 뒤에 붙어있는 d자를 없애면 됩니다. 참고로 파일명은 남겨드립니다.

opencv_calib3d240.lib
opencv_contrib240.lib
opencv_core240.lib
opencv_features2d240.lib
opencv_ffmpeg240.lib
opencv_flann240.lib
opencv_gpu240.lib
opencv_haartraining_engine.lib
opencv_highgui240.lib
opencv_imgproc240.lib
opencv_legacy240.lib
opencv_ml240.lib
opencv_objdetect240.lib
opencv_ts240.lib
opencv_video240.lib

 (참고로 라이브러리 버전을 정확히 확인하시기 바랍니다. 안그럼 VS2010에서 못읽어옵니다.)

여기까지가 Visual Studio 2010의 설정이었습니다. 그런데 아직도 끝이 아닙니다. 마지막으로 해야 할 작업이 조금 더 있습니다. 지금 설정한 것은 방금 생성한 프로젝트에 관한 속성 설정이었습니다. 이걸 매번 반복적으로 하기보다는 뭔가의 path를 정해놓고 거기서 계속 불러오게끔 한다면 매번 이럴 필요는 없는겁니다. 이걸 하려면 컴퓨터의 환경변수를 수정해줘야 합니다.

 

시작 메뉴에서 컴퓨터의 속성을 들어가면 중간에 고급 시스템 설정이라는 항목이 있습니다. 이걸 들어가시면 아래에 환경변수라고 되어 있는 것을 누르시면 됩니다.

 

 

그러면 사용자의 계정에 따라서 변수를 선언할 것인지, 전체 시스템에 관한 변수 선언인지를 결정하게 되는데 저같은 경우는 시스템 변수를 수정하는 방향으로 나갔습니다. 시스템 변수중 요소를 보면 Path라고 되어 있는데 여기를 수정하고 다음과 같이 넣어주면 됩니다.

 

 

여기서 유의할 점 두가지는 폴더와 폴더사이의 칸은 ; (새미콜론)으로 나눠져있다는것과

 자신의 시스템에 따라서 path를 집어넣어줘야 한다는 겁니다. 가령 32비트면 x86의 vc10의 bin 폴더를 선택해줘야 합니다.

이렇게 하고 나서 재부팅!!

 

마지막으로 해야 될거는 tbb라는 걸 받아서 Windows의 System32 또는 SysWow64 폴더에 넣어줘야 한다는 겁니다. 애초에 openCV라는 것이 인텔의 구성원이 만든 오픈 소스툴입니다. 그러면서 자사 cpu에 대한 지원을 강화시켰는데 버전이 올라가면서 추가적으로 지원된 기능이 바로 Threading building block(http://threadingbuildingblocks.org/ver.php?fid=174)이라는 겁니다. 병렬처리를 도와준다고 하네요. 아무튼 압축을 풀면 폴더가 하나 더 있는데 이 폴더를 아까 받은 opencv 폴더에 넣어줘야 합니다. 그러고 나서 앞에서 말한것처럼 tbb_debug.dll 파일을 집어넣는게 마지막입니다.

  조금 복잡합니다. 특히 64비트는 이것저것 신경써주고 진짜 마지막으로 하나 더 남았습니다. 바로 컴파일시 64비트 형식으로 컴파일하게끔 설정해야 되는 겁니다.

 

build- Configuration Manager로 들어가면 Platform에 win32로 되어 있을 겁니다. 32비트 운영체제라면 상관없는 64비트 운영체제에서는 컴파일시 생성되는 파일도 64비트에 맞춰서 생성되어야 하기 때문에 이 항목을 x64로 바꿔줘야 합니다.

 

 

여기까지가 끝입니다. 이제 예제 샘플하나 가져와서 돌려보면 정상적으로 돌아갑니다.

 

 

조금 삽질은 많이 했는데 그래도 원하는 결과를 얻을 수 있었네요. 제가 헤맸던 부분은 맨마지막에 플렛폼 바꿔주는 내용을 못찾아서 조금 고생했었네요. 이 글 읽으시는 분은 이런 고생 안하셨으면 좋겠습니다.

 돌이켜보자면 opencv에서 나눠지는 32비트냐 64비트 라이브러리의 차이는 결과 파일이 해당 비트로 나오냐의 차이인거 같네요. 사견을 덧붙이자면 64비트에서도 32비트용 어플리케이션을 만들자면 굳이 64비트 라이브러리가 필요할까 라는 생각이 듭니다. 운영체제가 64비트라도 제가 쓰고 있는 Visual studio는 32비트용이거든요.. 물론 더 찾아봐야 확실한 정보를 드릴 수 있을 것 같네요. 여기까지 였습니다.

 

댓글