데이터분석/Vision Recognition

OpenCV 3 + 비주얼 스튜디오 + 윈도우즈10 설치

늘근이 2015. 11. 28. 19:30

OpenCV는 굉장히 설치하기가 까다롭다. 기존 C++로 개발을 해보지 않았다면 머리가 아프다. JVM이나 각종 스크립트 언어는 인터프리터가 알아서 해주겠지만, C/C++은 플랫폼에 종속되기 때문에 빌드자체가 잘 안되기 마련이다.


설치를 하려고 그대로 블로그를 따라하려고 했다가는 각종 에러에 부딪히기 때문에, 구조를 알고 가자.


OpenCV를 홈페이지에서 설치하면 다음과 같은 구조를 띄고있다.



출처 : 고락가락닷컴


source는 굳이 소스를 건드리지 않으면 일단은 제쳐둬도 된다. MakeFile을 통한 빌드가 필요하지 않다. 일단은 build되어있는 완성품을 이용해 본다. 

여기서 약간 헷갈리는게, x64도 있고, x86이 있다. 자신의 기종에 맞게 선택해서 진행하면 되기는 하는데 나중에 비주얼스튜디오에서 properties 를 통해 구성관리자 에서 컴파일할 버전을 고를수 있다. 이 설정과 맞춰야 한다. 무턱대고 64비트라고 저 디렉터리만 찾고 있으면 빌드할 버전과 맞지 않아서 LNK2001 외부기호를 확인할수 없습니다 에러가 수도없이 뜬다.

include는 #include 구문을 쓰기위한 헤더파일이다. 이 인클루드가 성공적으로 된다면 더이상 신택스 에러는 뜨지 않을것이다. (하지만 헤더파일만 연결해놓았다면 역시나 LNK2001 컴파일에러가 뜬다)

VC12는 비주얼 스튜디오 버전과 맞추면 되는데, vc10 (VS2010), vc11 (VS2012) vc12(VS2013) 이며, opencv버전에는 vc11과 vc12밖에 지원이 되지않는다. 만약 opencv 2.4.9 버전 - VS2008 과 쿵짝을 맞춰보려고 한다면 잘 되지않고 소스를 그냥 다시 빌드해야한다. 

bin은 바이너리이며 이 부분에서 opencv를 작동시키는 exe와 dll파일이 있기 때문에 윈도우 환경변수로 등록되어야 있어야 한다. 

lib은 정적링크라이브러리 파일들이 있으며 core파일들이 존재하고 있다. 

(동적링크라이브러리는 DLL파일로써 굳이 실행파일에 엮여 들어가지않기때문에 실행파일의 용량이 작아지는 한편 DLL파일이 항상 같이 다녀야 하며 정적링크라이브러리는 LIB파일로써 컴파일할때 그안으로 다 들어가 버리기 때문에 용량은 커지지만 굳이 DLL파일을 찾을 필요가 없다. 가끔 윈도우 실행시 무슨무슨 DLL을 찾을수 없다고 하는 이유가 이것이다.)

따라서 결론적으로 저 주황색으로 표시된 놈들은 openCV를 실행시키기 위해서 무언가 연결해주는 작업을 해야한다. 링크를 시키든 어떻게 하든 말이다. 



일단 하나하나 차례를 적어보자면


1. 비주얼 스튜디오 설치 (커뮤니티 버전은 무료)

https://www.visualstudio.com/ko-kr/products/visual-studio-community-vs.aspx


2. openCV 설치

http://opencv.org/downloads.html


3. 파일 - 새로만들기 - 새 프로젝트 - 빈 프로젝트

4. 소스파일에 아이템 추가 (XXX.cpp 파일)

5. 프로젝트 오른쪽 클릭 -> 속성 Properties


6. 헤더추가 (#include 위함) 

C/C++ -> 일반 -> 추가포함 디렉터리 -> c:\opencv\build\include

7. LIB링크 추가 (정적 링크 라이브러리) 

링커 -> 일반 -> 추가 라이브러리 디렉터리 -> c:\opencv\build\x86\vc12\lib

8. LIB파일 추가 

링커 -> 입력 -> 추가 종속성 -> opencv_ts300d.lib / opencv_world300d.lib 추가

9.DLL / EXE 패스추가 

환경변수에 c:\opencv\build\x86\vc12\bin 추가


10. 구성관리자 확인

컴퓨터 시스템과는 상관없이 구성할 플랫폼 선택 (여기서는 x86)

이 되겠다. 


11. 구성 Release / Debug 같게 세팅이 되어있나 확인



LNK2001 - cv::fastfree cv::deallocate 외부기호를 확인할수 없습니다. 에러시

- 중요한것은 설정을 할때 Debug와 Release모두 같은 설정으로 해주어야 한다는것이다. 기본선택이 Debug이기 때문에 Release 설정을 안해주는 경우가 있다. 그냥 모두구성으로 해준다.

- 활성 솔루션 플랫폼이 x86과 x64가 잘못선택되어있는 경우가 있다. 일관성이 있어야 한다.

- 그밖에 뭔가 설정을 제대로 해주지 않아 링크가 걸려있지 않는 경우거나 x86이 x64랑 잘못연결되어있는 경우이다. 


Permission Denied 에러시

Qt로 프로그래밍 할시 이상한 버그인데, 실행된 프로그램이 정상종료가 안되서 프로세스에 남아있어 이러한 경우가 생긴다. 



최종적으로 빌드가 되나 확인한다