소리 소문도 없이 OpenCV 3.3.0-rc 버전이 릴리즈되었습니다. OpenCV github releases 페이지를 보니 3일 전에 OpenCV 3.3.0-rc 버전이 소스 파일 형태로 업데이트가 되었다고 표시되어 있는데요, opencv_contrib 쪽 소스 코드의 3.3.0-rc 버전은 10일전에 올라왔다고 되어 있습니다. 아마도 2017년 6월 30일 경에 3.3.0-rc 버전이 모두 릴리즈되고 메인 소스 쪽에만 약간의 업데이트가 있었던 것은 아닌가 싶습니다. OpenCV 3.3.0-rc 버전은 아래 링크에서 다운로드 받을 수 있습니다.



OpenCV 3.3.0-rc 버전 릴리즈 소식은 OpenCV 공식 사이트에서도 언급이 되어 있지 않습니다. 조용히 RC 버전을 릴리즈하고 내부적으로 테스트를 하고 있는 것이 아닌가 싶은데요, 어쨋든 새롭게 릴리즈된 버전이고 하니 다운로드 받아서 직접 빌드하는 방법을 알아보겠습니다.


기존에 OpenCV 3.2 버전을 빌드하는 방법은 아래 블로그와 유투브에서 설명한 적이 있습니다. 혹시 OpenCV 빌드를 한 번도 안해보신 분들은 아래 글과 동영상을 먼저 훑어보시는 것을 권장하구요..



그럼 본격적으로 OpenCV 3.3.0-rc 버전을 빌드하는 방법을 설명하겠습니다.


개인적으로 OpenCV 빌드 작업은 C:\opencv 폴더를 만들어서 진행을 합니다. 그러므로 C:\opencv 폴더를 만들고, 여기에 OpenCV 3.3.0-rc 소스 코드의 압축 파일을 해제합니다. opencv 메인 소스와 opencv_contrib 소스 코드를 모두 압축 해제하면 아래와 같은 폴더 구조를 가지게 됩니다.


위 그림에서 mybuild 폴더는 실제 빌드 작업을 진행할 폴더이며, 여러분이 직접 만들어 주어야 합니다. 일단 폴더 구조를 위와 같이 구성하였으면 이제 CMake 프로그램을 실행하여 Visual Studio 2017 용 솔루션 파일과 프로젝트 파일을 생성합니다. CMake 사용법에 대한 자세한 설명은 위에 링크해놓은 블로그와 동영상을 참고하시기 바라며, 다만 여기서는 CMake 기본 설정에서 변경한 내역만 정리하겠습니다.


  • BUILD_EXAMPLES: 선택
  • BUILD_opencv_world: 선택
  • INSTALL_PYTHON_EXAMPLES: 선택
  • OPENCV_EXTRA_MODULES_PATH: C:/opencv/opencv_contrib-3.3.0-rc/modules
  • WITH_CUDA: 선택 해제
  • WITH_OPENGL: 선택


OpenCV 3.2에서는 opencv_contrib 쪽 소스 코드를 함께 빌드할 때 BUILD_opencv_world 옵션을 선택하면 에러가 발생하는 버그가 있었는데요, 그런 버그는 이미 예전에 해결이 되었습니다. 그리고 2017년 1월에 발생한 OpenCV 커밋 중에 opencv_contrib 모듈도 opencv_world 쪽으로 포함시키는 내용이 있어서 모든 opencv 기능을 opencv_world330.dll 하나로 사용할 수 있습니다. WITH_CUDA 선택을 해제한 이유는 CUDA가 Visual Studio 2017을 지원하지 않기 때문입니다.


위와 같이 설정하여 OpenCV.sln 파일을 생성합니다. 그리고 Visual Studio 2017에서 OpenCV.sln 파일을 불러와서 빌드를 진행하면 되는데요... 에러가 하나 발생하네요 ㅠㅠ


C:\opencv\opencv_contrib-3.3.0-rc\modules\ximgproc\src\structured_edge_detection.cpp 파일 584라인과 585 라인에서 M_PI를 사용하는 부분에서 에러가 발생하는데요, 아마도 math.h 파일의 M_PI를 제대로 포함하지 않았기 때문인 것 같습니다. 굳이 opencv 소스 코드에서 M_PI를 사용하는 것보다는 CV_PI를 사용하는 것이 더 깔끔할테니까 아래 그림과 같이 M_PI 대신 CV_PI로 소스 코드를 수정합니다.


그리고는 다시 빌드를 하면 잘 진행이 됩니다. (참 쉽죠? :-)


전체 솔루션 빌드를 진행하고, INSTALL 프로젝트도 따로 빌드를 하고나면 C:\opencv\mybuild\install 폴더에 헤더 파일, LIB 파일, DLL 파일이 사이좋게 모이게 됩니다.


opencv_world330.dll 파일 하나의 크기가 거의 100MByte입니다. 용량이 좀 부담스러울 수도 있지만 OpenCV 공부를 하는 과정에서는 opencv_world330.dll 파일 하나만 있으면 편해서 저는 opencv_world 속성을 선택하는 것을 선호합니다. 회사에서 프로젝트를 진행하거나 배포를 위한 목적이라면 개별 모듈을 따로 빌드하는 것이 더 좋겠지요.


참고로 OpenCV 3.3.0-rc 버전에서는 예전에 opencv_contrib 쪽 소스 구조에 있던 dnn(deep neural network) 모듈이 opencv 메인 소스 쪽으로 이동을 했습니다. 그 외에도 C++11 지원이 추가된 것으로 보이고, CPU 아키텍쳐(SSE, AVX, SIMD, etc)에 대한 소스 코드 분기가 많이 추가된 것 같네요. 공식적인 change log가 없어서 어떤 것이 더 바뀐 것인지는, 나중에 OpenCV 3.3.0 정식 버전이 릴리즈되면 알 수 있을 것 같습니다.







Posted by kkokkal
: