제임스딘딘의
Tech & Life

개발자의 기록 노트/영상처리

OpenCV 2.2 - Visual Studio2010 에 설치하기

제임스-딘딘 2011. 5. 24. 19:19

OpenCV 2.2부터는 VS2010용 pre-compiled 버전(VS2008도 사용 가능)이 나온 동시에 OpenCV의 라이브러리들이 대대적으로 정리되고 이름들도 많이 바뀌어서 예전에 만들어둔 프로젝트를 돌리는데 문제가 좀 생기게 되었습니다. 새 버전에 어서 적응하는 방법 밖에 없겠습니다. 허허허헛...

 

2.1에 비해 달라진 점 중 눈에 띄는 몇 가지는 다음과 같습니다.

 - 라이브러리들의 재정리 및 이름 변경

 - 새로운 스테레오비전 알고리즘 등의 최신 기술을 사용한 알고리즘 다수 추가

 - 약 200여 가지의 대대적 버그 수정 (아직 부분적으로 메모리 누수 현상이 있다고 합니다)

 - NVIDIA의 OpenCV에 대한 공식 지원 (CUDA 라이브러리와의 연동으로 데이터 연산에 3D 가속 기능 사용 가능)

 

개인적으로는 3D 가속 기능이 가장 마음에 드는데 CUDA와의 연동을 위해서는 CMake를 이용하여 새로 빌드하는 과정이 필요하므로 여기에서는 다루지 않겠습니다. 나중에 시간이 되면 따로 정리해서 포스팅하죠. 여기에는 VS2010에서 기본적인 코드를 돌리기까지의 방법만 정리해 놓겠습니다. VS2010은 이미 설치되어 있다는 가정 하에 적도록 하겠습니다.

 

*** 설치 정도는 다 알아서 하시는 분들은 바로 PART II VS2010에서의 기본 설정 부분으로 넘어가세요~~

 

PART I   OpenCV 2.2 설치

 

1) 아래의 주소에서 미리 컴파일된 버전인 OpenCV-2.2.0-win32-vs2010.exe를 받습니다. 32비트용이므로 64비트 OS를 쓰시는 분들은 CMake를 사용해서 컴파일 해서 쓰셔야 됩니다.

 http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.2/



여기에서 맨 아래 38.9메가 짜리를 받으시구요.

 

 

2) 다운받은 설치파일을 실행합니다. 기본값들로 다음,다음,다음.. 버튼들을 마구 눌러주다가~! 아래의 화면에서 'Add OpenCV to the system PATH for all users'를 선택해 줍니다. (현재의 계정에서만 라이브러리를 사용할 경우 for current user를 선택하셔도 됩니다) 라이브러리의 경로가 시스템 환경변수에 등록되어, 프로젝트 실행때마다 dll 파일들을 프로젝트 폴더로 복사해야 하는 수고를 덜어줍니다.

 

** 수동으로 하시려면 첫번째의 Do not ... 이 선택된 상태로 설치하신 후, 내 컴퓨터의 등록정보에서 OpenCV가 설치된 경로의 bin 폴더를 경로로 추가해 줍니다. (기본 경로에 설치시 C:\OpenCV2.2\bin을 추가하시면 되겠죠)

경로 추가에 익숙하지 않은 분들을 위해 조금 더 덧붙이자면...세미콜론을 포함한, ;C:\OpenCV2.2\bin을 붙이시는 겁니다 (아래의 화면을 참고하세요)

Path 부분을 선택하시고...

 


이렇게 입력해 주시면 됩니다.

 

PART II VS2010에서의 기본 설정

 

이제 코드를 작성하기 위한 본격적인 설정 부분입니다. 프로젝트 속성 페이지에 들어가서 뭔가를 만져주고 하던 것들이 2.2에서는 거의 필요가 없습니다. 이전에 VS2008+ OpenCV 2.1 TIPs에 적었던 내용을 응용하면 2.2에서는 더 간단하게 코드에서만 거의 모든 설정을 완료할 수 있습니다. 그걸 설명하려는 것이죠 ㅋ _ㅋ) 일반적인 방법은 뒷부분에 적어두겠습니다.

 

* 설치 경로가 C:\OpenCV2.2 기준이므로 다른 곳에 설치하신 분들은 해당 위치에 맞게 바꿔주시면 됩니다.

 

1) 프로젝트 속성 페이지에서 [구성속성] -> [C/C++] -> [일반] -> [추가 포함 디렉터리] 부분에

 

C:\OpenCV2.2\include

 

라고 적어줍니다. 속성 메뉴에서 해야하는 건 이게 끝입니다. 이전 버전에서 라이브러리 이름을 하나하나 추가해주고 하던 삽질(?)이 이제는 이거 하나로 줄었습니다.

 

 

2) 대신에 코드 부분에서 적어야 하는 분량이 약간 늘었습니다만... 텍스트 파일로 만들어두고 필요할 때 복사해서 쓰시면 되겠네요. 코드 나갑니다. 바뀐 라이브러리들의 이름도 살펴보세요.

 

#include "stdafx.h"
#include "opencv2\\opencv.hpp" // 핵심입니다. 이것 때문에 1) 항목이 있는거죠.

                                                       // 주의 할 점은 stdafx.h 뒤에 붙이셔야 한다는 겁니다.

 

// 여기부터는 복사해서 쓰세요. 라이브러리의 이름들도 바뀌었고, 경로까지 포함해주셔야 합니다.

 

// ----------->8--------------- 절취선 --------------------

#ifdef _DEBUG
    // 디버그 모드에서 사용되는 라이브러리들입니다. (끝에 d가 붙죠)

    #pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_core220d.lib")
    #pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_imgproc220d.lib")
    #pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_highgui220d.lib")
    #pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_objdetect220d.lib")
    // 필요에 따라 추가할 수 있는 라이브러리들

    //#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_ml220d.lib")
    //#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_features2d220d.lib")
    //#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_video220d.lib")
    //#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_calib3d220d.lib")
    //#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_flann220d.lib")
    //#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_contrib220d.lib")
    //#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_legacy220d.lib")
    //#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_gpu220d.lib")
#else
    // 릴리즈 모드용

    #pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_core220.lib") 
    #pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_imgproc220.lib")
    #pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_highgui220.lib")
    #pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_objdetect220.lib")
    // 필요에 따라 추가할 수 있는 라이브러리들

    //#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_ml220.lib")
    //#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_features2d220.lib")
    //#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_video220.lib")
    //#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_calib3d220.lib")
    //#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_flann220.lib")
    //#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_contrib220.lib")
    //#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_legacy220.lib")
    //#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_gpu220.lib")
#endif

// ----------->8--------------- 절취선 --------------------

 

// 아래는 샘플 폴더에 있는 레나 할머니의 리즈시절 사진을 띄워서 가우시안 스무딩 처리를 해주는 예제입니다.


int _tmain(int argc, _TCHAR* argv[])
{

    IplImage* src_img = cvLoadImage("C:\\OpenCV2.2\\samples\\c\\lena.jpg", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
    if (src_img == NULL){
        return 0;
    }

    cvNamedWindow("src");
    cvNamedWindow("dst");

    IplImage* dst_img = cvCreateImage(cvGetSize(src_img), src_img->depth, src_img->nChannels);

    cvSmooth(src_img, dst_img, CV_GAUSSIAN, 9);

    cvShowImage ("src", src_img);
    cvShowImage ("dst", dst_img);

    cvWaitKey (0);

    cvDestroyAllWindows();

    cvReleaseImage(&src_img);
    cvReleaseImage(&dst_img);


 return 0;
}

 

** 타이핑도 귀찮으므로 ( ㅋ _ㅋ);; 위의 코드를 첨부파일로 넣었습니다.  

 

결과>>

 

 

PART II-2 다른 설정 방법

 

OpenCVWiki에 있는 내용의 번역 수준이지만 적어두겠습니다.

 

1) [프로젝트 속성 페이지]->[VC++ 디렉터리]->[포함 디렉터리]에 다음을 추가합니다.

 

      C:\OpenCV2.2\include

      C:\OpenCV2.2\include\opencv

 

2) [프로젝트 속성 페이지]->[VC++ 디렉터리]->[라이브러리 디렉터리]에 다음을 추가합니다.

 

      C:\OpenCV2.2\lib

 

3) [프로젝트 속성 페이지]->[링커]->[입력]->[추가 종속성] 부분에 아래의 파일들을 입력합니다.

 

    - [구성]을 Debug에 놓고 아래를 입력합니다.

      C:\OpenCV2.2\lib\opencv_core220d.lib
      C:\OpenCV2.2\lib\opencv_highgui220d.lib
      C:\OpenCV2.2\lib\opencv_video220d.lib
      C:\OpenCV2.2\lib\opencv_ml220d.lib
      C:\OpenCV2.2\lib\opencv_legacy220d.lib
      C:\OpenCV2.2\lib\opencv_imgproc220d.lib

 

    - [구성]을 Release에 놓고 아래를 입력합니다.

      C:\OpenCV2.2\lib\opencv_core220.lib
      C:\OpenCV2.2\lib\opencv_highgui220.lib
      C:\OpenCV2.2\lib\opencv_video220.lib
      C:\OpenCV2.2\lib\opencv_ml220.lib
      C:\OpenCV2.2\lib\opencv_legacy220.lib
      C:\OpenCV2.2\lib\opencv_imgproc220.lib

 

 

 이렇게 하고 #include "stdafx.h"와 main 함수 사이의 내용을 아래로 바꾸면 동일한 결과를 얻을 수 있습니다.

 

#include <cv.h>
#include <cxcore.h>
#include <highgui.h>

출처 : http://blog.naver.com/hamstery?Redirect=Log&logNo=110102815307