Showing posts with label opencv_viz. Show all posts
Showing posts with label opencv_viz. Show all posts

2018/08/21

Build OpenCV 3.4.2 with VTK 8.1.1

오래전에 OpenCV의 viz 모듈에 관심이 있어 VTK를 OpenCV 와 VTK를 빌드한 적이 있었다.
Build OpenCV 3.1 with VTK 7.0 in Visual Studio 2015

그때당시 VTK의 Renderer 설정과 world 모듈 생성에 문제가 있어서 복잡하게 했던 기억이 있다.

먼저 VTK 를 CMake를 이용하여 정적라이브러리로 빌드한다.
이전과는 다르게 Renderer 설정을 변경할 필요가 없었다. 기본 제공하는 OpenGL2로 진행을 한다.
OpenCV와 정적으로 연결되도록 BUILD_SHARED_LIBS 옵션을 해제하였다.

Srouce: E:/DevWork/VTK/VTK-8.1.1
Build:  E:/DevWork/VTK/VTK-8.1.1_VS2013_x86Static
 
Configuration options
  BUILD_EXAMPLES                   uncheck
  BUILD_SHARED_LIBS                uncheck
  BUILD_TESTING                    uncheck
  CMAKE_INSTALL_PREFIX             BuildPath/install

VTK 빌드를 완료하였다면 OpenCV를 빌드 할 차례이다.
OpenCV는 VTK 빌드 경로와 viz와 world 모듈을 빌드하도록 하였고 CXX11, OpenGL과 OpenMP를 사용하도록 설정하였다. 빠른 테스트를 위해 BUILD_TESTS 옵션을 선택하였다.

Source: E:/DevWork/OpenCV/VTK/opencv-3.4.2
Build:  E:/DevWork/OpenCV/VTK/opencv-3.4.2_VC2013_x86
 
Configuration options
  BUILD_DOCS            uncheck
  BUILD_EXAMPLES        uncheck
  BUILD_TESTS           check
  VTK_DIR               E:/DevWork/VTK/VTK-8.1.1_VS2013_x86Static
  WITH_OPENGL           check
  WITH_OPENMP           check
  
  BUILD_opencv_viz      check
  BUILD_opencv_world    check

이전에는 viz 모듈이 world모듈로 포함이되지 않아서 world 별도로 빌드하고 viz 빌드시 라이브러리 참조를 opencv_core에서 opencv_world 로 변경하였는데 이번에는 viz 모듈이 world모듈로 포함이 되었다.
따라서 빌드후 world 모듈인 opencv_world342.dll 파일만 있으면 된다.

완료후 실제 테스트를 하려면 시간이 소요될 것 같아서 OpenCV를 빌드할 때 BUILD_TESTS 옵션을 선택하여 테스트 파일이 만들어지도록 하였다.

빌드를 마친후 bin\Release 폴더의 opencv_test_viz.exe를 실행해 보았다.

문제없이 실행되는 것으로 보아 viz 모듈이 world에 제대로 포함된 것 같다.

2016/10/07

Build OpenCV 3.1 with VTK 7.0 in Visual Studio 2015

Build OpenCV 3.1 with VTK 7.0 in Visual Studio 2015

Visual Stuido 2015 버전에서 OpenCV 3.1과 VTK 7.0을 빌드해 보았다.

주인공인 OpenCV 3.1와 VTK 7.0 가 준비가 되어야 겠고 빌드 구성을 위해 CMake가 필요하다.
CMake 는 3.6.2 버전을 사용하였다.

우선 VTK를 OpenCV 빌드에 사용할 수 있도록 빌드를 해야 한다. 빌드를 신속하게 하기위해 필요 없는 것으 빌드하지 않도록 하였다. 그리고 이때 주의 할 사항은 OpenGL설정이다. VTK 7.0에서는 Rendering Backend가 OpenGL2 로 새롭게 작성이 되었고 이 것이 기본값으로 되어있다.
하지만 OpenCV 에서는 이를 지원하지 않고 이전 버전의 OpenGL을 사용해야 한다. 그래서 Rendering Backend 설정과 OpenGL 설정을 변경해 주어야 한다. 아래는 VTK를 빌드할 때 구성한 내용이다.

Srouce: E:/DevWork/OpenCV/VTK-7.0.0_x64
Build:  E:/DevWork/OpenCV/VTK-7.0.0_x64/VS2015_x64

Configuration options
  BUILD_EXAMPLES                   uncheck
  BUILD_SHARED_LIBS                uncheck
  BUILD_TESTING                    uncheck
  Module_vtkRenderingOpenGL        check
  Module_vtkRenderingContextOpenGL check
  Module_vtkRenderingVolumeOpenGL  check
  VTK_RENDERING_BACKEND            OpenGL
  CMAKE_INSTALL_PREFIX             BuildPath/install

Build projects
  ALL_BUILD with debug configuration
  INSTALL with release configuration

VTK 를 아무 문제없이 빌드를 했다면 이제 OpenCV를 빌드할 차례이다.
빠른 빌드를 위해 필요없는 항목은 제거를 했지만 간단한 테스트를 위해 Test 프로젝트를 빌드를 수행하였다.

Source: E:/DevWork/OpenCV/opencv_v3.1.0/sources
Build:  E:/DevWork/OpenCV/opencv_v3.1.0/VS2015_x64_vtk

Configuration options
  BUILD_DOCS            uncheck
  BUILD_EXAMPLES        uncheck
  BUILD_TESTS           check
  VTK_DIR               E:/DevWork/OpenCV/VTK-7.0.0_x64/VS2015_x64
  WITH_OPENGL           check
  WITH_OPENMP           check
 
  BUILD_opencv_python2  uncheck
  BUILD_opencv_python3  uncheck
  BUILD_opencv_viz      check

Build projects
  ALL_BUILD with debug configuration
  INSTALL with release configuration

위 설정으로 Configure를 마치면 로그화면에서 아래와 같이 VTK가 포함이 된 것을 확인 할 수 있다.
VTK support:                 YES (ver 7.0.0)

구성 완료후 빌드를 하여 bin 폴더의 test 파일들 중 opencv_text_viz.exe를 실행시켜 정상 동작을 확인 하였다.
마지막으로 opencv_world를 만들기 위해서 아래 설정을 변경하고 다시 빌드하였다.
viz와 world를 함께 빌드하면 문제가 발생을 하여 우선 viz를 제거하고 빌드하였다.
이 라이브러리를 정상적으로 사용이 가능한지는 추후 테스트를 해 봐야 알 수 있을 것 같다.

Configuration options
  BUILD_opencv_viz      uncheck
  BUILD_opencv_world    check
 
Build projects
  ALL_BUILD with debug & release configuration

Build 경로 아래의 install 폴더에 라이브러리를 사용하기 위한 파일들이 있다. 디버그용이 필요한 경우 Build 경로의 bin 폴더와 lib 폴더의 파일들을 이용하면 된다. 헤더파일은 install 폴더에 포함되어 있는 include 파일을 이용하면 된다.

라이브러리는 빌드 하였고 이제 테스트를 해 볼 차례이다.