ユースケース.OpenCVはWindows でも簡単にインストールできるが,OpenCV conrtib を存分に使いたい,自分の環境にあわせてビルドしたい(NVidia CUDA を使うなど)場合は,ソースコードからビルドする.
OpenCV は,実時間コンピュータビジョン (real time computer vision) の アルゴリズムと文書とサンプルコードの集まり.
【サイト内の OpenCV 関連ページ】
【OpenCV の公式情報】
Windows での Git のインストール: 別ページ »で説明
【関連する外部ページ】
Git の公式ページ: https://git-scm.com/
Windows での cmake のインストール: 別ページ »で説明
【関連する外部ページ】
cmake の公式ダウンロードページ: https://cmake.org/download/
Windows での 7-Zip のインストール: 別ページ »で説明
【関連する外部ページ】
7-Zip の公式ページ: https://sevenzip.osdn.jp/
Windows での SuiteSparse,gflags,glog,Ceres ソルバ(Ceres Solver)のインストール: 別ページ »で説明
sfm を使いたいときはインストールする.
Windows での Python 3.10,関連パッケージ,Python 開発環境のインストール: 別ページ »で説明
【サイト内の関連ページ】
Python のまとめ: 別ページ »にまとめ
【関連する外部ページ】
Python の公式ページ: https://www.python.org/
Windows での Build Tools for Visual Studio 2022,NVIDIA ドライバ,NVIDIA CUDA ツールキット 11.8,NVIDIA cuDNN v8.6 のインストールと動作確認: 別ページ »で説明
【関連する外部ページ】
OpenCV を C:\opencv, C:\opencv_contrib にインストールする
C: cd %HOMEPATH% rmdir /s /q opencv rmdir /s /q opencv_contrib
次のページなどで,最新バージョンのバージョン番号を確認できる.
cd %HOMEPATH% rmdir /s /q opencv git clone --recursive https://github.com/opencv/opencv.git
OpenCV contrib が不要の場合は,この手順は不要である
cd %HOMEPATH% rmdir /s /q opencv_contrib git clone --recursive https://github.com/opencv/opencv_contrib.git
バージョン 3.10 系列なのか、バージョン 3.9 系列なのか、3.8 系列なのか、3.7 系列なのか、3.6 系列なのか、調べる.この情報はあとで使う.
下の実行例では、Python のバージョンは 3.10 系列(3.10.5) である
python --version
複数表示されたときは,表示の一番上を使う.この結果は,あとの設定で使う.
where python
python -m pip install -U pip setuptools python -m pip install -U numpy pylint flake8 python -m pip uninstall python-opencv
cmake でのオプションについて
Build Tools for Visual Studio 2022 を使うときは,「cmake -G "Visual Studio 17 2022"」と設定する. Build Tools for Visual Studio 2022 のインストールは: 別ページ »で説明
2019 のときは, 「cmake -G "Visual Studio 16 2019"」のように指定する.
「c:\」ではなくて「c:/」のようにしている. 「\」は使わずに「/」を使う. これは、opencv_contrib の modules 下の cmake のエラーを回避するため.
次の設定では,実際に存在するファイル名を設定する必要がある. 必要に応じて,実際の自分のパソコンのファイルを検索すること.
※ 先ほど調べた Python 3 のバージョンが、 Python 3.10 系列のときは「python310.lib」となり、 Python 3.9 系列のときは「python39.lib」となり、 Python 3.8 系列のときは「python38.lib」となり、 Python 3.7 系列のときは「python37.lib」のようにとなる.
cmake の実行手順例は次の通り
cd %HOMEPATH% cd opencv rmdir /s /q build mkdir build cd build del CMakeCache.txt cmake -G "Visual Studio 17 2022" -A x64 -T host=x64 ^ -DCMAKE_BUILD_TYPE=RELEASE ^ -DBUILD_SHARED_LIBS=OFF ^ -DWITH_CUDA=ON ^ -DCUDA_NVCC_FLAGS="-allow-unsupported-compiler" ^ -DBUILD_opencv_world=ON ^ -DBUILD_opencv_apps=ON ^ -DBUILD_opencv_sfm=OFF ^ -DOPENCV_EXTRA_MODULES_PATH=C:%HOMEPATH%\opencv_contrib\modules ^ -DWITH_PYTHON=ON ^ -DBUILD_opencv_python2=OFF ^ -DPYTHON_DEFAULT_EXECUTABLE="C:/Program Files/Python310/python.exe" ^ -DBUILD_opencv_python3=ON ^ -DPYTHON3_EXECUTABLE="C:/Program Files/Python310/python.exe" ^ -DPYTHON3_INCLUDE_DIR="C:/Program Files/Python310/include" ^ -DPYTHON3_LIBRARY="C:/Program Files/Python310/libs/python310.lib" ^ -DPYTHON3_NUMPY_INCLUDE_DIRS="C:/Program Files/Python310/lib/site-packages/numpy/core/include" ^ -DBUILD_EXAMPLES=ON ^ -DWITH_OPENGL=ON ^ -DOPENCV_ENABLE_NONFREE=OFF ^ -DCMAKE_INSTALL_PREFIX="C:/opencv" ^ -DBLAS_openblas_LIBRARY="C:/OpenBLAS/lib/openblas.lib" ^ -DGlog_DIR="C:/glog" ^ -DGLOG_LIBRARY="C:/glog/lib/glog.lib" ^ -DGLOG_INCLUDE_DIR="C:/glog/include" ^ -DGflags_DIR="C:/gflags" ^ -DCeres_DIR="C:/ceres" ^ -DMETIS_INCLUDE_DIR="C:/suitesparse/include" ^ -DCXSparse_INCLUDE_DIR="C:/suitesparse/include/suitesparse" ^ -DCXSparse_LIBRARY="C:/suitesparse/lib/libcxsparse.lib" ^ -DSuiteSparse_AMD_INCLUDE_DIR="C:/suitesparse/include/suitesparse" ^ -DSuiteSparse_CAMD_INCLUDE_DIR="C:/suitesparse/include/suitesparse" ^ -DSuiteSparse_CCOLAMD_INCLUDE_DIR="C:/suitesparse/include/suitesparse" ^ -DSuiteSparse_CHOLMOD_INCLUDE_DIR="C:/suitesparse/include/suitesparse" ^ -DSuiteSparse_COLAMD_INCLUDE_DIR="C:/suitesparse/include/suitesparse" ^ -DSuiteSparse_Config_INCLUDE_DIR="C:/suitesparse/include/suitesparse" ^ -DSuiteSparse_SPQR_INCLUDE_DIR="C:/suitesparse/include/suitesparse" ^ -DSuiteSparse_AMD_LIBRARY="C:/suitesparse/lib/libamd.lib" ^ -DSuiteSparse_CAMD_LIBRARY="C:/suitesparse/lib/libcamd.lib" ^ -DSuiteSparse_CCOLAMD_LIBRARY="C:/suitesparse/lib/libccolamd.lib" ^ -DSuiteSparse_CHOLMOD_LIBRARY="C:/suitesparse/lib/libcholmod.lib" ^ -DSuiteSparse_COLAMD_LIBRARY="C:/suitesparse/lib/libcolamd.lib" ^ -DSuiteSparse_Config_LIBRARY="C:/suitesparse/lib/suitesparseconfig.lib" ^ -DSuiteSparse_SPQR_LIBRARY="C:/suitesparse/lib/libspqr.lib" ^ -DINSTALL_TESTS=ON ^ -DINSTALL_C_EXAMPLES=ON ^ -DINSTALL_BIN_EXAMPLES=ON ^ -DINSTALL_PYTHON_EXAMPLES=ON ^ ..
cmake でのオプションの調整について
例えば,上に書いた cmake でのオプションに、次を付け加えるなどが考えられる.
-DWITH_CUDA=ON ^ -DCUDA_FAST_MATH=ON ^ -DWITH_CUBLAS=ON ^ -DWITH_CUDNN=ON ^ -DWITH_NVCUVID=ON ^ -DOPENCV_DNN_CUDA=ON ^
※ Intel MKL は,「w_mkl_2019.4.245.exe」を用いてインストール済み,そして,「C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2019\windows\redist\intel64_win\tbb\vc_mt」にパスが通っているとする.
上に書いた cmake でのオプションに、次を付け加える
-DWITH_MKL=ON ^ -DMKL_USE_MULTITHREAD=ON ^ -DWITH_TBB=ON ^ -DMKL_WITH_TBB=ON ^
上に書いた cmake でのオプションに、次を付け加える.
※ Windows での VTK のインストール手順は、 「Windows で VTK 最新版をソースコードからビルドして、インストールする(Build Tools for Visual Studio を利用)」で説明している.
-DWITH_VTK=ON ^ -DVTK_DIR="C:/tools/VTK" ^
上に書いた cmake でのオプションに、次を付け加える.
※ Windows でのインストール手順は、 「Windows で libPCL 1.9.0, Boost, Eigen, OpenNI 2.2, NITE2 のインストール」で説明している.
-DWITH_OPENNI2=ON ^ -DOPENNI2_INCLUDE="C:/Program Files/OpenNI2/include" ^ -DOPENNI2_LIB="C:/Program Files/OpenNI2/lib" ^ -DOPENNI2_REDIST="C:/Program Files/OpenNI2/Redist" ^
上に書いた cmake でのオプションに、次を付け加える.
Windows での OpenBLAS (BLAS, CBLAS, LAPACK, LAPACKE)のインストール(ソースコードを使用)(Build Tools for Visual Studio を利用): 別ページ »で説明
-DOpenBLAS_LIB="C:/OpenBLAS/lib/openblas.lib" ^ -DOpenBLAS_INCLUDE_DIR="C:/OpenBLAS/include/openblas" ^ -DWITH_LAPACK=ON ^ -DLAPACK_LIBRARIES="C:/tools/lapack-release/lib/lapack.lib" ^ -DLAPACK_INCLUDE_DIR="C:/tools/lapack-release/CBLAS/include" ^ -DLAPACK_CBLAS_H="C:/tools/lapack-release/CBLAS/include/cblas.h" ^
Python 3 のところが自動設定される(Python 3 を使わない場合は,その設定は無視)
※ 下図のとおりになるとは限らない.
※ エラーメッセージが出た場合には,うまくいっていない.設定を変えてやり直す.
終了するまでしばらく待つ.
cmake --build . --config RELEASE cmake --build . --config RELEASE --target INSTALL
エラーが無ければ,インストールが終わっている.エラーメッセージが出ていないことを確認. そして,インストールが終わっていることも確認.
※ 黄色の警告メッセージは無視しても良い
コマンドプロンプトを管理者として実行: 別ページ »で説明
call powershell -command "$oldpath = [System.Environment]::GetEnvironmentVariable(\"Path\", \"Machine\"); $oldpath += \";C:\opencv\x64\vc17\bin\"; [System.Environment]::SetEnvironmentVariable(\"Path\", $oldpath, \"Machine\")" call powershell -command "$oldpath = [System.Environment]::GetEnvironmentVariable(\"Path\", \"Machine\"); $oldpath += \";C:\opencv\bin\"; [System.Environment]::SetEnvironmentVariable(\"Path\", $oldpath, \"Machine\")"
次を追加する
C:\opencv\x64\vc17\staticlib
そのために Windows で,コマンドプロンプトを管理者として実行
コマンドプロンプトを管理者として実行: 別ページ »で説明
call powershell -command "$oldpath = [System.Environment]::GetEnvironmentVariable(\"LIB\", \"Machine\"); $oldpath += \";C:\opencv\x64\vc17\staticlib\"; [System.Environment]::SetEnvironmentVariable(\"LIB\", $oldpath, \"Machine\")"
コマンドプロンプトを管理者として実行: 別ページ »で説明
call powershell -command "[System.Environment]::SetEnvironmentVariable(\"OPENCV_ROOT\", \"c:\opencv\", \"Machine\")"
「Python310」のところは,実際の Python インストールディレクトリに読み替えて実行すること.
dir "C:\Program Files\Python310\lib\site-packages\cv2"
※ Python 関係のファイルがインストールされていない場合でも,Python ローダ (python loader) を使用することは推奨しない.(Python ローダを使用すると,エラーが出たときに,Python のインストールからやり直す可能性がある.Python ローダをよく知らずに実行するのは避けること)
python -c "import cv2; print( cv2.__version__ )"
ここではメモ帳 (notepad) を使っている.
Windows では,Visual Studio の x64 Native Tools コマンドプロンプトを使う.(Windows のスタートメニューで起動できる). そして,次のように実行して,C++ のプログラムファイルを作る. そのファイル名は a.cpp としている.
c: cd %HOMEPATH% notepad a.cpp
#include<opencv2/opencv.hpp> int main (int argc, char *argv[]) { cv::Mat bgr = cv::imread("c:/opencv/sources/samples/data/fruits.jpg"); cv::imshow("", bgr); cv::waitKey(0); cv::destroyAllWindows(); return 0; }
cl /I"c:\opencv\include" a.cpp /link /LIBPATH:"c:\opencv\x64\vc17\staticlib" opencv_world460.lib .\a.exe
Python プログラムを実行する
import cv2 bgr = cv2.imread('c:/opencv/sources/samples/data/fruits.jpg') cv2.imshow("", bgr) cv2.waitKey(0) cv2.destroyAllWindows()
画像が表示されるので確認. このあと,ウインドウの右上の「x」をクリックしない.画面の中をクリックしてから,何かのキーを押して閉じる