日本に西の端に棲息する研究者見習いの備忘録

パソコン・プログラミング関係や最近読んだ論文・本などをまとめていきます。

OpenCV-Contribをビルドする(後編インストール)

OpenCV-Contribを使いたいのでOpenCVと一緒にビルドしました。

OpenCVだけでよい場合はSourceForceからexeファイルをダウンロードすれば使えるようになります。

krhb.hatenablog.com

前編はこちらです

krhb.hatenablog.com

インストール環境

必要なアプリケーション

少なくとも上の4つがインストールされているという前提で話を進めます。Visual Studio 2019 は不可。下の3つはオプションです。

  • CUDA 10.2

  • Qt 5.14.1

  • VTK 8.2.0

OpenCV+OpenCV-Contribのインストール

Anaconda Navigater をスタートメニューから起動します 左端の Environments をクリックして、下にある Create をクリックして仮想環境を作ります。 名前を py_opencvにします。

Power Shell Prompt も py_opencvAnaconda Navigator からインストールします。

conda create -n py_opencv でも作成できますが仮想環境のフォルダが C:\Users\ユーザー\anaconda3\envs\py_opencv の中が空になっていたので Anaconda Navigater で作ることをおすすめします。

作成した仮想環境py_opencvAnaconda Navigater で立ち上げて、Power Shell PromptAnaconda Navigater から起動します。

すると

(py_opencv) PS C:\Users\ユーザー>

のように表示され初めから仮想環境が立ち上がります。

次に作業用フォルダを作成してOpenCVのソースをgithubからダウンロードします。

# 作業用のフォルダ作成
mkdir c:\build\opencv410
cd c:\build\opencv410

# OpenCVのソース取得
git clone https://github.com/opencv/opencv.git

# OepnCV Contribのソース取得
git clone https://github.com/opencv/opencv_contrib.git

次にCMakeでビルドします。仮想環境の中で実行することでCMakeが適切なpythonディレクトリを自動で見つけてくれます。

#numpyのインストール(必ず実行)
pip install numpy

# ビルド
cd C:\build\opencv410\opencv
mkdir build
cd build
cmake ../ -DBUILD_JAVA:BOOL=0 `
          -DBUILD_opencv_java_bindings_generator:BOOL=0 `
          -DBUILD_PERF_TESTS:BOOL=0 `
          -DBUILD_TESTS:BOOL=0 `
          -DCMAKE_INSTALL_PREFIX:PATH=C:/lib/OpenCV410 `
          -DCPU_BASELINE:STRING=AVX2 `
          -DCPU_DISPATCH:STRING=AVX2 `
          -DCUDA_ARCH_BIN:STRING=7.5 `
          -DCUDA_ARCH_PTX:STRING=7.5 `
          -DCUDA_FAST_MATH:BOOL=1 `
          -DCUDA_GENERATION:STRING=Turing `
          -DINSTALL_PYTHON_EXAMPLES:BOOL=1 `
          -DOPENCV_ENABLE_NONFREE:BOOL=1 `
          -DOPENCV_EXTRA_MODULES_PATH:PATH=C:/build/opencv410/opencv_contrib/modules `
          -DWITH_CUDA:BOOL=1 `
          -DWITH_QT:BOOL=1 `
          -G "Visual Studio 15 2017 Win64"

CUDAQtがいらないなら -DWITH_CUDA:BOOL=0, -DWITH_QT:BOOL=0 にします。

C:\build\opencv410\opencv\build の中に OpenCV.sln が生成されているので Visual Studio 2017 で開きます。

Visual Studio 2017の メニュービルドバッチビルド を選択して、プロジェクトが ALL_BUILDINSTALL の行の ReleaseDebug の両方の チェックボックス にチェックを入れて リビルド をクリックします。

するとC:\lib\OpenCV410の中にインストールされます。

最後に環境変数pathを通しておきます。

# OpenCVのpathを通す
$SystemPath = [System.Environment]::GetEnvironmentVariable("Path","User")
$SystemPath += ";C:\lib\OpenCV410\x64\vc15\bin"
[System.Environment]::SetEnvironmentVariable("Path",$SystemPath,"User")

Visual Studio で使う

VisualStudio(2019でも可)で使いたい場合はプロジェクトのプロパティの構成を すべての構成 に、プラットフォームを x64 に切り替えてから

プロジェクトのプロパティ → デバッグ環境C:\lib\OpenCV410\x64\vc15\bin

プロジェクトのプロパティ → VC++ディレクトインクルードディレクトC:\lib\OpenCV410\include

プロジェクトのプロパティ → VC++ディレクトライブラリディレクトC:\lib\OpenCV410\x64\vc15\lib

プロジェクトのプロパティ → C/C++追加のインクルードディレクトC:\lib\OpenCV410\include

プロジェクトのプロパティ → リンカー追加のライブラリーディレクトC:\lib\OpenCV410\x64\vc15\lib

を入力します。

プロパティの構成を Debug に切り替えて、 PowerShellで以下を実行したあとに

Get-ChildItem C:\lib\OpenCV410\x64\vc15\lib\*.* -Include *d.lib -Name | clip

プロジェクトのプロパティ → リンカー追加の依存ファイルの入力欄を開いてCTRL+Vを実行もしくは以下をコピペします。

opencv_aruco430d.lib
opencv_bgsegm430d.lib
opencv_bioinspired430d.lib
opencv_calib3d430d.lib
opencv_ccalib430d.lib
opencv_core430d.lib
opencv_cudaarithm430d.lib
opencv_cudabgsegm430d.lib
opencv_cudacodec430d.lib
opencv_cudafeatures2d430d.lib
opencv_cudafilters430d.lib
opencv_cudaimgproc430d.lib
opencv_cudalegacy430d.lib
opencv_cudaobjdetect430d.lib
opencv_cudaoptflow430d.lib
opencv_cudastereo430d.lib
opencv_cudawarping430d.lib
opencv_cudev430d.lib
opencv_cvv430d.lib
opencv_datasets430d.lib
opencv_dnn430d.lib
opencv_dnn_objdetect430d.lib
opencv_dnn_superres430d.lib
opencv_dpm430d.lib
opencv_face430d.lib
opencv_features2d430d.lib
opencv_flann430d.lib
opencv_fuzzy430d.lib
opencv_gapi430d.lib
opencv_hdf430d.lib
opencv_hfs430d.lib
opencv_highgui430d.lib
opencv_imgcodecs430d.lib
opencv_imgproc430d.lib
opencv_img_hash430d.lib
opencv_intensity_transform430d.lib
opencv_line_descriptor430d.lib
opencv_ml430d.lib
opencv_objdetect430d.lib
opencv_optflow430d.lib
opencv_phase_unwrapping430d.lib
opencv_photo430d.lib
opencv_plot430d.lib
opencv_quality430d.lib
opencv_rapid430d.lib
opencv_reg430d.lib
opencv_rgbd430d.lib
opencv_saliency430d.lib
opencv_shape430d.lib
opencv_stereo430d.lib
opencv_stitching430d.lib
opencv_structured_light430d.lib
opencv_superres430d.lib
opencv_surface_matching430d.lib
opencv_text430d.lib
opencv_tracking430d.lib
opencv_video430d.lib
opencv_videoio430d.lib
opencv_videostab430d.lib
opencv_xfeatures2d430d.lib
opencv_ximgproc430d.lib
opencv_xobjdetect430d.lib
opencv_xphoto430d.lib

プロパティの構成を Release に切り替えて、 PowerShellで以下を実行したあとに

Get-ChildItem C:\lib\OpenCV410\x64\vc15\lib\*.* -Include *d.lib -Name | foreach { $_ -replace "d.lib", ".lib" } | clip

プロジェクトのプロパティ → リンカー追加の依存ファイルの入力欄を開いてCTRL+Vを実行もしくは以下をコピペします。

opencv_aruco430.lib
opencv_bgsegm430.lib
opencv_bioinspired430.lib
opencv_calib3d430.lib
opencv_ccalib430.lib
opencv_core430.lib
opencv_cudaarithm430.lib
opencv_cudabgsegm430.lib
opencv_cudacodec430.lib
opencv_cudafeatures2d430.lib
opencv_cudafilters430.lib
opencv_cudaimgproc430.lib
opencv_cudalegacy430.lib
opencv_cudaobjdetect430.lib
opencv_cudaoptflow430.lib
opencv_cudastereo430.lib
opencv_cudawarping430.lib
opencv_cudev430.lib
opencv_cvv430.lib
opencv_datasets430.lib
opencv_dnn430.lib
opencv_dnn_objdetect430.lib
opencv_dnn_superres430.lib
opencv_dpm430.lib
opencv_face430.lib
opencv_features2d430.lib
opencv_flann430.lib
opencv_fuzzy430.lib
opencv_gapi430.lib
opencv_hdf430.lib
opencv_hfs430.lib
opencv_highgui430.lib
opencv_imgcodecs430.lib
opencv_imgproc430.lib
opencv_img_hash430.lib
opencv_intensity_transform430.lib
opencv_line_descriptor430.lib
opencv_ml430.lib
opencv_objdetect430.lib
opencv_optflow430.lib
opencv_phase_unwrapping430.lib
opencv_photo430.lib
opencv_plot430.lib
opencv_quality430.lib
opencv_rapid430.lib
opencv_reg430.lib
opencv_rgbd430.lib
opencv_saliency430.lib
opencv_shape430.lib
opencv_stereo430.lib
opencv_stitching430.lib
opencv_structured_light430.lib
opencv_superres430.lib
opencv_surface_matching430.lib
opencv_text430.lib
opencv_tracking430.lib
opencv_video430.lib
opencv_videoio430.lib
opencv_videostab430.lib
opencv_xfeatures2d430.lib
opencv_ximgproc430.lib
opencv_xobjdetect430.lib
opencv_xphoto430.lib

Debug構成ではopencv_core430d.libopencv_highgui430d.lib

Release構成ではopencv_core430.libopencv_highgui430.lib

のみできちんとOpenCVが動く場合があるようですが私の環境ではすべてのlibファイルを指定しないと動きませんでした。

以下のコードがきちんと動くか確認します。

#include <opencv2/opencv.hpp>
#include <iostream>

int main()
{
    cv::Mat img;

    img = cv::imread("C:/P2232351.JPG"); #適当な写真ファイルに書き換えてください。

    cv::imshow("title", img);
    cv::waitKey(0);

    return 0;
}

Pythonで使う

Pythonで使う場合はpy_opencvの仮想環境を立ち上げてimport cv2を実行するだけで読み込んでくれます。

以下のコードがきちんと動くか確認します。

import cv2

img=cv2.imread("C:/P2232351.JPG"); #適当な写真ファイルに書き換えてください。
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Pythonの場合はOpenCVをビルドしなくても

pip install opencv-contrib-python

PowerShellかCommand Promptから実行すれば使えるようになります。

pip install opencv-python

OpenCV単体ならこちらです。

参考

dev.infohub.cc

www.kunihikokaneko.com

www.atmarkit.co.jp

www.atmarkit.co.jp

krhb.hatenablog.com

www.atmarkit.co.jp

dev.infohub.cc

qiita.com

labs.eecs.tottori-u.ac.jp

ser1zw.hatenablog.com

github.com