[opencv] 프로젝트 내장 빌드

[opencv] 프로젝트 내장 빌드

나는 라이브러리 하면, 컴퓨터에 설치하고 사용하는 방식이 더 좋다고 생각했다.

ex) perlcpan 같은 방식..

그런데 이는 상황마다 다른것 같다. 크기가 좀 있는 프로젝트의 경우, 내장 설치가 가능하다면,

프로젝트 디렉토리내에 라이브러리가 포함되는게 인수자를 위해 좋은것 같다. (이동성도 좋아지고)

http://opencv.org/downloads.html

위 링크에서 Windows용 버전을 받으면 된다.

환경변수 이런거 설치하면 포터블 프로젝트가 되지 않으니, 프로젝트 디렉토리에 위치하도록 한다.

opencv-3.1.0.exe 파일을 실행하면 opencv라는 폴더가 생성된다.

이를 VS솔루션 폴더에 놓는다. * VS Solution * .sln * lib * opencv-3.1.0.exe * opencv * build * source * LISENCE.txt * README.md.txt

위와 같은 형식으로 폴더를 넣으면 된다.

VS2015를 기준으로 하며 opencv 3 버전은 VS2015를 지원한다.

빌드를 x64로 준비하고

프로젝트 -> 옵션 -> 구성속성 -> C/C++ -> 일반 항목에서 추가 포함 디렉터리에 다음을 추가한다.

당연히 Debug/Release 둘다 추가해준다.

../lib/opencv/build/include/

정적 라이브러리는 소스에서 직접 추가하는 방법도 있고

#if defined(_DEBUG) && defined(_WIN64)
#pragma comment(lib,"../lib/opencv/build/x64/vc14/lib/opencv_world310d.lib")
#elif !defined(_DEBUG) && defined(_WIN64)
#pragma comment(lib,"../lib/opencv/build/x64/vc14/lib/opencv_world310.lib")
#else
#error "only build in x64"
#endif

프로젝트 설정에서 추가하는 방법도 있다.

프로젝트 -> 속성 -> 링커 -> 입력 -> 추가 종속성

VS2013 Debug : ../lib/opencv/build/x64/vc12/lib/opencv_world310d.lib
VS2013 Release : ../lib/opencv/build/x64/vc12/lib/opencv_world310.lib
VS2015 Debug : ../lib/opencv/build/x64/vc14/lib/opencv_world310d.lib
VS2015 Release : ../lib/opencv/build/x64/vc14/lib/opencv_world310.lib

를 추가하면 된다. 당연히 Release도 추가해준다. (debug용 dll과 구분 유의)

이제 lib\opencv\build\x64\vc14\bin 에서 opencv_world310d.dll , opencv_world310.dll 을 각각 VS솔루션 폴더의

x64 속의 Debug/Release에 넣어 두도록 하면 된다.


이제 인터넷에서 아무 이미지나 가져와서 cpp 와 같은 폴더내에 위치 시키고

아래의 코드를 컴파일 해보자.

#include <iostream>    //cout
#include<cstdlib>    //EXIT_FAILURE
#include <opencv2/opencv.hpp>
int main(){  
    std::cout << "OpenCV Version : " << CV_VERSION << std::endl;
    cv::Mat img;
    cv::namedWindow("prj_test", CV_WINDOW_AUTOSIZE);

    img = cv::imread("image.jpeg", CV_LOAD_IMAGE_COLOR);
    if (img.empty())
    {
        std::cout << "[!] image load fail" << std::endl;
        return EXIT_FAILURE;
    }
    cv::imshow("prj_test", img);
    cv::waitKey(0);
    cv::destroyWindow("prj_test");
    return EXIT_SUCCESS;
}


추가 포함 디렉토리

../lib/opencv3.0.0/build/include/

링커 추가종속성

../lib/opencv3.0.0/build/x86/vc12/lib/opencv_world300d.lib ../lib/opencv3.0.0/build/x86/vc12/lib/opencv_world300.lib