OpenCV 2.4.9 설치 과정 (Visual Studio 2013)
OpenCV Downloading http://opencv.org/downloads.html 해당 홈페이지에서 OpenCV 2.4.9 version을 다운받도록 한다. Visual Studio에서 OpenCV를 사용할 때 OpenCV\build\include OpenCV\build\x86\vc12\bin OpenCV\build\x86\vc12\lib 해당 폴더들만 있어도 사용이 가능하기 때문에 해당 폴더들만 이동시켜서 사용해도 상관없다. (Visual Studio 2010의 경우는 vc12가 아닌 vc10이라는 사실) (!참조)그리고 위의 OpenCV 폴더 주소를 그대로 복사하지 말고 자신의 컴퓨터에서의 경로를 사용하도록 한다.
환경변수에 bin 폴더 등록 제어판 시스템 고급 시스템 설정 환경변수 에 들어간다. 시스템 변수에 Path 라는 변수가 있다. 해당 Path 변수에서 변수 값으로 OpenCV\build\x86\vc12\bin 해당 폴더를 등록한다. 등록할 때 다른 변수 위치와 구분을 위해 ;(세미콜론)을 반드시 사용해야 한다.
Visual studio 프로젝트 속성 수정 Visual Studio로 프로젝트를 하나 생성한다. (mfc or win32 콘솔 응용 프로그램) 미리 컴파일된 헤더를 체크한 상태에서 마침을 누른다.
Visual studio 프로젝트 속성 수정 프로젝트 생성 후 해당 프로젝트의 속성에 들어간다. 프로젝트 속성 구성 속성 VC++ 디렉터리로 들어간다. VC++ 디렉터리에서 포함 디렉터리에서는 include 폴더를 라이브러리 디렉터리에서는 lib 폴더를 등록한다. (!참조)처음 프로젝트 생성 시 Debug 모드로 되어있을 것이니 Release 모드로 OpenCV를 사용할 경우 다시 등록해야 한다.
링커에서 라이브러리 목록 등록 방법 2가지 OpenCV를 사용하기 위해 라이브러리 목록들을 등록하는데 소개할 방법은 2가지가 있다. 사용하고 싶은 방법을 사용하면 된다. 직접 프로젝트 속성 링커 입력에 들어가서 사용하는 OpenCV 버전에 맞는 라이브러리를 Copy 하는 것. 프로젝트에 stdafx.h 에 라이브러리를 써넣는 것. (stdafx.h가 아니어도 됨.) 개인적으로는 2번이 더 편하다. 우선 1번부터 소개한 뒤에 2번을 소개한다.
링커에서 라이브러리 목록 등록 방법 첫 번째 프로젝트 속성 링커 입력 추가 종속성 페이지를 연다. (처음 열게 되면 아무것도 쓰여져 있지 않다)
링커에서 라이브러리 목록 등록 방법 첫 번째 추가 종속성에 사용하려는 OpenCV의 라이브러리 목록을 입력한다. (라이브러리 목록은 ppt 맨 마지막 부록에 첨가하였다.) 입력하면 아래와 같이 작성된다. 이후 확인을 누르고 속성을 빠져나오면 된다.
링커에서 라이브러리 목록 등록 방법 두 번째 두 번째 방법이다. 필자는 해당 방법이 더 유용하게 쓰인다. 링커에서 라이브러리 목록 등록 방법 두 번째 두 번째 방법이다. 필자는 해당 방법이 더 유용하게 쓰인다. 이전 프로젝트 생성 시, 미리 컴파일된 헤더를 체크했다면 stdafx.h 파일이 생성되어 있다. (OpenCV 설치가 목적이기 때문에 stdafx.h 에 대한 것은 설명하지 않음) Stdafx.h 파일에 그림과 같이 작성한다. (작성 내용은 부록 참조) 현재 필자의 프로젝트를 Release 모드로 사용 중이기 때문에 Debug 모드 부분은 사용하지 않는 것을 그림을 통해 알 수 있다. (자신이 어떤 모드를 사용하든 저 부분은 건드릴 필요 없게 된다.)
링커에서 라이브러리 목록 등록 방법 두 번째 반드시 Stdafx.h 파일에 Copy할 필요 없다. 자신이 헤더 파일을 직접 하나 생성시켜서 이용하면 된다. 필자는 아래와 같이 Setting.h 파일을 생성하여, 다른 헤더 파일도 같이 등록하여 사용하고 있다.
예제 1 OpenCV 설정이 잘 되었는지 예제를 통해 확인해보자. 프로젝트 폴더 안에 영상 파일(jpg 등등)을 TEST.jpg라고 하여 Copy 해 놓자. (필자는 TEST.png)
예제 1 이전 Stdafx.h 에 OpenCV 라이브러리 목록을 업데이트하는 슬라이드에서 #include "opencv2/opencv.hpp“ 부분을 등록한 것을 볼 수 있다. OpenCV 사용 시 아래 두 cpp만 등록하면 딱히 문제될 것은 없다. #include "opencv2/opencv.hpp“ #include “opencv2/highgui/highgui.hpp”
예제 1 이전 슬라이드의 설명처럼 OpenCV cpp 파일을 미리 등록했으니 메인 cpp 파일에 등록할 필요가 없다. 그래서 아래 그림처럼 메인 cpp 내용 맨 위에 #include "stdafx.h“ 만 작성하면 된다. 그 아래 해당 코드를 작성하면 된다. #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { cv::Mat matTest = cv::imread("TEST.png"); cv::imshow("TEST", matTest); cv::waitKey(0); return 0; }
예제 1 솔루션 빌드 결과는 아래와 같다.
OpenCV 추가 문제 해결 방안 해결 방안 1 해결 방안 2 해당 과정으로 OpenCV를 설정하였는데 실행되지 않는 경우 폴더 위치를 잘 못 설정한 경우 환경변수 등록을 잘 못한 경우 OpenCV cpp 파일을 등록하지 않은 경우 라이브러리 목록 등록에 문제가 있는 경우 폴더 등록 시 VC12가 아닌 10으로 한 경우 (Visual Studio 2013은 VC 12 , Visual Studio 2010은 VC 10) 해결 방안 1 OpenCV lib 와 dll 폴더 안 자료들을 모두 C:\Windows\System32 에 Copy 한다. (제대로 환경변수에 등록 안 된 경우 이렇게 하면 될 수 있음) 해결 방안 2 Visual Studio를 종료했다가 다시 켜고 실행해보세요. (제대로 환경변수에 등록 안 된 경우 이렇게 하면 될 수 있음)
속성 시트의 장, 단점 자신의 컴퓨터에서만 사용할 것이 아니라면 속성시트는 추가하지 않는 것이 좋다. 이유는 속성시트를 등록한 프로젝트를 타 컴퓨터에 옮겨서 실행할 경우, 해당 속성시트에 등록된 OpenCV 폴더를 찾지 못해 프로젝트 실행이 중지된다. 속성시트를 한번 등록하면 여러 번 재사용이 가능하기 때문에 편한데… 위와 같은 문제점이 발생한다는 단점이 있다.
부록(2.4.9 Version Debug lib) opencv_calib3d249d.lib opencv_contrib249d.lib opencv_core249d.lib opencv_features2d249d.lib opencv_flann249d.lib opencv_gpu249d.lib opencv_highgui249d.lib opencv_imgproc249d.lib opencv_legacy249d.lib opencv_ml249d.lib opencv_nonfree249d.lib opencv_objdetect249d.lib opencv_ocl249d.lib opencv_photo249d.lib opencv_stitching249d.lib opencv_superres249d.lib opencv_ts249d.lib opencv_video249d.lib opencv_videostab249d.lib
부록(2.4.9 Version Release lib) opencv_calib3d249.lib opencv_contrib249.lib opencv_core249.lib opencv_features2d249.lib opencv_flann249.lib opencv_gpu249.lib opencv_highgui249.lib opencv_imgproc249.lib opencv_legacy249.lib opencv_ml249.lib opencv_nonfree249.lib opencv_objdetect249.lib opencv_ocl249.lib opencv_photo249.lib opencv_stitching249.lib opencv_superres249.lib opencv_ts249.lib opencv_video249.lib opencv_videostab249.lib
부록 (stdafx.h에 copy 하기 위한 코드) // OpenCV library #define OPENCV_249 #include "opencv2/opencv.hpp" #ifdef OPENCV_249 #pragma message("Linking with OpenCV 2.4.9...") #ifdef _DEBUG #pragma comment(lib, "opencv_core249d.lib") #pragma comment(lib, "opencv_highgui249d.lib") #pragma comment(lib, "opencv_calib3d249d.lib") #pragma comment(lib, "opencv_imgproc249d.lib") #pragma comment(lib, "opencv_objdetect249d.lib") #pragma comment(lib, "opencv_video249d.lib") #pragma comment(lib, "opencv_gpu249d.lib") #pragma comment(lib, "opencv_ml249d.lib") #pragma comment(lib, "opencv_contrib249d.lib") #else #pragma comment(lib, "opencv_core249.lib") #pragma comment(lib, "opencv_highgui249.lib") #pragma comment(lib, "opencv_calib3d249.lib") #pragma comment(lib, "opencv_imgproc249.lib") #pragma comment(lib, "opencv_objdetect249.lib") #pragma comment(lib, "opencv_video249.lib") #pragma comment(lib, "opencv_gpu249.lib") #pragma comment(lib, "opencv_ml249.lib") #pragma comment(lib, "opencv_contrib249.lib") #endif