How to build OpenCV on Windows

윈도우즈 환경에서 OpenCV 개발 환경을 구성할 때 다음의 두 가지 방법이 있다.

  1. 이미 빌드(build)가 되어 있는 바이너리(binary) 파일을 찾아서 설치
  2. 소스코드(source code)를 받아서 직접 빌드(build)

1번 방법의 경우 설치가 간편하지만 빌드시 이미 고정되어 있는 여러 가지 옵션들을 변경할 수 없다는 점, 최신 업데이트가 반영되지 않을 수 있다는 점, 그리고 마지막으로 확장 모듈인 OpenCV contrib가 포함되어 있지 않을 가능성이 높은 점 때문에 2번 방법이 필요한 경우가 발생한다. (CUDA 지원을 활성화하기 위해서도 소스코드를 이용한 빌드 방법이 필요하다.)

소스코드로 부터 빌드를 하는 방법을 요약하면 다음과 같다.

  1. 소스코드를 다운로드 받는다. (기본 & 확장 둘 다)
  2. CMake를 이용해서 Visual Studio용 솔루션(solution) 및 프로젝트(project) 파일을 만든다.
  3. 생성된 project 파일을 컴파일한다.

이 예제에서 사용한 버전(version)은 다음과 같다.

  1. OpenCV 4.2.0
  2. Visual Studio 2019

OpenCV의 소스코드는 다음 링크에서 받을 수 있다. https://github.com/opencv/opencv

OpenCV 확장 모듈의 소스코드는 다음 링크에서 받을 수 있다. https://github.com/opencv/opencv_contrib

다운로드 받은 소스코드들을 압축을 풀어서 적당한 곳에 저장한다. 이 예제에서는 다음과 같이 “c:\opencv\source” 라는 폴더를 만들어서 압축을 풀어주었다.

CMake GUI 를 실행한다. (만약 설치되어 있지 않다면 먼저 https://cmake.org/download/ 에서 설치 파일을 다운로드 받아서 설치한다.)

다음과 같이 소스코드 위치를 지정해준다.

“Configure” 버튼을 클릭한다. 만약 “c:\opencv\build” 폴더가 없으면 생성할지의 여부를 물어본다. 그리고 다음과 같이 사용할 컴파일러를 지정해준다.

다시 “Configure” 버튼을 클릭하면 다음과 같이 configuration이 시작된다.

configuration이 끝나면 다음과 같은 내용이 표시된다.

빌드 옵션을 바꾸고 “Configure” 버튼을 누를 때마다 이전과 비교해서 바뀐 내용이 빨간색으로 표시된다.

원하는 옵션을 설정하고 “Configure” 버튼을 클릭한다. 이 예제에서의 빌드 옵션은 다음과 같다.

CUDA 관련 옵션은 계속 에러가 나서 일단 끄고 빌드를 진행했다.

Eigen 라이브러리를 지원하도록 관련 옵션을 설정해준다.

OpenCV 확장 모듈의 소스코드가 있는 경로를 지정해준다.

위와 같이 최종 결과가 생성되는 경로를 지정해준다.

JAVA는 사용하지 않기 때문에 관련 모듈을 빌드할 필요가 없다.

.exr 파일도 읽고, 쓰기 위해서 관련 옵션을 켜준다.

Python에서도 사용할 수 있도록 관련 옵션을 켜준다.

동적 라이브러리(dynamic library)를 생성되도록 옵션을 설정한다. 만약 이 옵션을 끄면 정적 라이브러리(static library)가 생성된다.

찾아보니 TBB를 사용에 따른 성능 향상이 크지 않다고 하여 관련 옵션을 설정하지 않았다.

world 옵션을 사용하지 않으면 여러 개의 개별적인 라이브러리 파일이 생성되고, world 옵션을 사용하면 opencv_world420.lib 파일 하나로 최종 라이브러리 파일이 생성된다.

위와 같이 원하는 옵션들을 설정해주고 “Generate” 버튼을 클릭하면 “C:\opencv\build” 경로에 솔루션 파일(OpenCV.sln), 프로젝트 파일(INSTALL.vcxproj) 등이 생성된다. 둘 중 아무 파일이나 더블클릭하면 비주얼 스튜디오가 열리는데, 다음과 같이 INSTALL 프로젝트를 빌드한다.

성공적으로 빌드가 끝나면 다음과 같은 메세지를 확인할 수 있다.

탐색기를 열어서 확인해보면 빌드 메세지와 같이 “c:\opencv\build\install” 경로에 여러 가지 결과 파일 및 폴더들이 생성되어 있다.

OpenCV를 이용한 개발시 빌드에 필요한 헤더 파일들은 C:\opencv\build\install\include”에 생성된다. 개발하는 프로젝트에서 이 경로를 지정해준다. (다른 곳으로 옮겨서 경로를 지정해도 상관없다.)

OpenCV를 이용한 개발시 빌드에 필요한 라이브러리 파일들은 “C:\opencv\build\install\x64\vc16\lib”에 생성된다. 개발하는 프로젝트에서 이 경로를 지정해준다. (다른 곳으로 옮겨서 경로를 지정해도 상관없다.)

“C:\opencv\build\install\x64\vc16\bin” 경로를 환경변수 “PATH”에 추가해준다. (다른 곳으로 옮겨서 경로를 지정해도 상관없다.)

Leave a Reply