1) 前準備 #1
Cygwinのsetup.exeで必要なパッケージをインストールしておきます.
通常は,最小構成でも以下のもの(+それらが依存するライブラリなど)は必要でしょう.
"unzip" "cmake" "gcc-g++" "make" "diffutils" "patch" "libwebp-devel" "libIlmImf-devel" "libjasper-devel" "libjpeg-devel" "libpng-devel" "libtiff-devel" "libhdf5-devel" "libbz2-devel" "zlib-devel"
2) 前準備 #2 (推奨)
ffmpegをビルドします.
for example:
$ cd /tmp/ $ tar xvjf ffmpeg-3.4.2.tar.bz2 $ cd ffmpeg-3.4.2/ $ ./configure --disable-yasm \ --disable-iconv \ --enable-avresample \ --prefix=/usr/local/ffmpeg-3.4.2/ $ make -j ${NUMBER_OF_PROCESSORS} install
3-1) 前準備 #3.1 (任意:vizモジュールを使う場合)
OpenCVの"viz"モジュールはVTKが必須なので,
vizモジュールをビルドしたい場合には,まずVTKのビルドが必要です.
具体的な手順はこちらの手順を参照.
3-2) 前準備 #3.2 (任意:sfmモジュールを使う場合)
OpenCVの"sfm"モジュールのreconstruction機能にはceres-solverが必須です.
もしもceres-solverが無いとreconstruction機能は無効化されます.
その場合でも,sfmをビルドするためにはglogとgflags は必須です.
ceres-solverのビルドには,以下のCygwinパッケージが必要です.
"eigen3" "libsuitesparseconfig-devel" "libspqr-devel" "libmetis-devel" "libcxsparse-devel" "libcolamd-devel" "libcholmod-devel" "libccolamd-devel" "libcamd-devel" "libamd-devel"次に,gflags, glog, ceres-solverの順にビルドする.
$ cd /tmp/ $ tar xvzf gflags-2.2.1.tar.gz $ mkdir gflags_build $ cd gflags_build/ $ cmake -D CMAKE_INSTALL_PREFIX:PATH=/usr/local/gflags-2.2.1/ \ /tmp/gflags-2.2.1/ $ make -j ${NUMBER_OF_PROCESSORS} install $ cd /tmp/ $ tar xvzf glog-0.3.5.tar.gz $ cd glog-0.3.5/ $ env CPPFLAGS="-D__CYGWIN64__" \ ./configure --with-gflags=/usr/local/gflags-2.2.1/ \ --prefix=/usr/local/glog-0.3.5/ $ make -j ${NUMBER_OF_PROCESSORS} install $ cd /tmp/ $ tar xvzf ceres-solver-1.13.0.tar.gz $ mkdir ceres-solver_build $ cd ceres-solver_build $ cmake -D CXSPARSE_INCLUDE_DIR:PATH=/usr/include/suitesparse/ \ -D GFLAGS_INCLUDE_DIR_HINTS:PATH=/usr/local/gflags-2.2.1/include/ \ -D GFLAGS_LIBRARY_DIR_HINTS:PATH=/usr/local/gflags-2.2.1/lib/ \ -D GLOG_INCLUDE_DIR:PATH=/usr/local/glog-0.3.5/include/ \ -D GLOG_LIBRARY:PATH=/usr/local/glog-0.3.5/lib/libglog.a \ -D CMAKE_INSTALL_PREFIX:PATH=/usr/local/ceres-solver-1.13.0/ \ /tmp/ceres-solver-1.13.0/ $ make -j ${NUMBER_OF_PROCESSORS} install
3-3) 前準備 #3.3 (任意:textモジュールを使う場合)
OpenCVの"text"モジュールはTesseract-OCRへのインタフェースを持っています.
Tesseract-OCRの入手は,Cygwinパッケージの以下のものをインストールすれば良いです.
"tesseract-ocr-devel"
3-4) 前準備 #3.4 (任意:freetypeモジュールを使う場合)
OpenCVの"freetype"モジュールはfreetypeライブラリとHarfBuzzに依存しています.
freetypeの入手は,Cygwinパッケージの以下のものをインストールすれば良いです.
"libfreetype-devel"次に,HarfBuzzは自前でビルドする必要があります.コードはこちらからアーカイブを入手できます.(githubのコードを使わないことに注意.githubにはビルドに必要な設定ファイルが含まれていません.) なおHarBuzz自体はcmakeでもビルド可能ですが,cmakeを使っても*.cmakeファイルが提供されないので,configureを使います(その場合は*.pcファイルがインストールされる).
$ cd /tmp/ $ tar xvzf harfbuzz-1.7.5.tar.bz2 $ cd harfbuzz-1.7.5/ $ ./configure --enable-static \ --disable-shared \ --prefix=/usr/local/harfbuzz-1.7.5/ $ make -j ${NUMBER_OF_PROCESSORS} install
4) パッチ適用
opencv-3.4.1.tar.gzおよびopencv_contrib-3.4.1.tar.gzを入手し,私のCygwin用パッチopencv-3.4.1-cygwin-patch-20180228.txt.gzとopencv_contrib-3.4.1-cygwin-patch-20180228.txt.gzを適用します.
for example:
$ cd /tmp/ $ tar xvzf opencv-3.4.1.tar.gz $ gunzip opencv-3.4.1-cygwin-patch-20180228.txt.gz $ cd opencv-3.4.1/ $ patch -p1 < ../opencv-3.4.1-cygwin-patch-20180228.txt $ cd /tmp/ $ tar xvzf opencv_contrib-3.4.1.tar.gz $ gunzip opencv_contrib-3.4.1-cygwin-patch-20180228.txt.gz $ cd opencv_contrib-3.4.1/ $ patch -p1 < ../opencv_contrib-3.4.1-cygwin-patch-20180228.txt
5) ビルド,インストール
OpenCVのビルドには,cmakeでENABLE_CXX11とHAVE_CXX11をdisableして,g++のコンパイラオプションに"-std=gnu++14"を設定する必要があります.
さらに,WITH_ITTもdisableする必要があります.(私がITT付きのビルドを試した範囲では,OpenCVのcoreモジュールのリンク時のエラーが解決できませんでした.)
また,私が試した際はCPU_DISPATCHを設定する必要がありました(AVX512_SKXのコードがエラーになったので).
for example:
$ mkdir build_shared_release/ $ cd build_shared_release/ $ env PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:/usr/local/ffmpeg-3.4.2/lib/pkgconfig/:/usr/local/harfbuzz-1.7.5/lib/pkgconfig/" \ cmake -D CMAKE_BUILD_TYPE:STRING=RELEASE \ -D BUILD_SHARED_LIBS:BOOL=ON \ -D ENABLE_CXX11:BOOL=OFF \ -D HAVE_CXX11:BOOL=OFF \ -D CMAKE_CXX_FLAGS:STRING="-std=gnu++14 -Wa,-mbig-obj" \ -D CMAKE_C_FLAGS:STRING="-Wa,-mbig-obj" \ -D CPU_DISPATCH:STRING="SSE4_1;SSE4_2;AVX;FP16;AVX2;" \ -D WITH_ITT:BOOL=OFF \ -D WITH_IPP:BOOL=OFF \ -D WITH_OPENMP:BOOL=ON \ -D WITH_OPENGL:BOOL=ON \ -D ENABLE_FAST_MATH:BOOL=ON \ -D BUILD_PERF_TESTS:BOOL=OFF \ -D BUILD_TESTS:BOOL=OFF \ -D BUILD_EXAMPLES:BOOL=OFF \ -D VTK_DIR:PATH=/usr/local/vtk-8.1.0/lib/cmake/vtk-8.1/ \ -D GLOG_INCLUDE_DIR:PATH=/usr/local/glog-0.3.5/include/ \ -D Glog_LIBS:PATH=/usr/local/glog-0.3.5/lib/libglog.a \ -D GFLAGS_INCLUDE_DIRS:PATH=/usr/local/gflags-2.2.1/include/ \ -D GFLAGS_LIBRARIES:PATH=/usr/local/gflags-2.2.1/lib/libgflags.a\ -D Ceres_DIR:PATH=/usr/local/ceres-solver-1.13.0/lib/cmake/Ceres/ \ -D CMAKE_INSTALL_PREFIX:PATH=/usr/local/opencv-3.4.1/ \ -D OPENCV_EXTRA_MODULES_PATH:PATH=/tmp/opencv/opencv_contrib-3.4.1/modules/ \ -D OPENCV_ENABLE_NONFREE:BOOL=ON \ /tmp/opencv-3.4.1/ $ make -j ${NUMBER_OF_PROCESSORS} install