日本時間で6/29の午前2時頃でしょうか、OpenCVのver.4.8.0がReleaseされました。
自分の備忘録+超初心者にもわかるように・を意識して手順を記録しておこうと思います。
CMake、Visual Studioは予め用意しておくこととします。
私の環境では、CMake 3.22.2、Visual Studio 2022 Professionalを利用しています。
はじめに、OpenCVライブラリのダウンロード。
今回はとりあえずCUDAとかQtとかは無しで、拡張ライブラリ(contrib)のみのシンプルなビルドを行いますので、以下リンクからzipファイルをダウンロードします。
いずれも「Code」の「Download ZIP」をクリックしたら取得できます。
解凍したら「opencv-4.8.0」と「opencv_contrib-4.8.0」が出てきますので、扱いやすいところに配置します。
なお、以降の説明で出てくるパス設定等は、以下に示す私の環境におけるものですので、異なる配置の場合は読み替えるようにしてください。
C:
├ _develop_lib
│ ├ opencv
│ │ ├ opencv-4.8.0
│ │ └ opencv_contrib-4.8.0
│ └ opencv_build
│ └ 4.8.0
└ opencv
└ 4.8.0
ざっくりまとめると、ダウンロードしたものは「C:\_develop_lib\opencv」、ビルドしたものは「C:\_develop_lib\opencv_build」、本番利用するものは「C:\opencv」にそれぞれ配置するようにしています。
次に、CMakeの設定ですが、超初心者にもわかるように・がモットーなので、GUI版で説明します。
「Where is the source code:」にOpenCV本体のパス、「Where to build the binaries:」にビルド結果保存先のパスをそれぞれ設定し、「Configure」をクリックすると子画面が出てきてVisual Studioのバージョンを設定するように促してくるので、適切なバージョンを選択して「Finisih」をクリックします。
しばらくは以下のような画面が表示されます。
終わると画面下部のメッセージボックスに「Configure done」と表示され、ビルドパラメータの設定ができるようになります。
今回はシンプル設定なので、以下の設定だけ行って、再度「Configure」をクリックします。
- BUILD_oepncv_world にチェック
- CMAKE_INSTALL_PREFIX … C:/_develop_lib/opencv_build/4.8.0/install
- OPENCV_EXTRA_MODULES_PATH … C:/_develop_lib/opencv/opencv_contrib-4.8.0/modules
変なエラーとかが出ることもなく、きちんと「Configure done」が表示されたら「Generate」をクリックします。
ちなみに私の環境だと、最終的に以下のようなメッセージが出力されています。
General configuration for OpenCV 4.8.0 ===================================== Version control: unknown Extra modules: Location (extra): C:/_develop_lib/opencv/opencv_contrib-4.8.0/modules Version control (extra): unknown Platform: Timestamp: 2023-06-29T12:11:58Z Host: Windows 10.0.22621 AMD64 CMake: 3.22.2 CMake generator: Visual Studio 17 2022 CMake build tool: C:/Program Files/Microsoft Visual Studio/2022/Professional/MSBuild/Current/Bin/amd64/MSBuild.exe MSVC: 1936 Configuration: Debug Release CPU/HW features: Baseline: SSE SSE2 SSE3 requested: SSE3 Dispatched code generation: SSE4_1 SSE4_2 FP16 AVX AVX2 AVX512_SKX requested: SSE4_1 SSE4_2 AVX FP16 AVX2 AVX512_SKX SSE4_1 (18 files): + SSSE3 SSE4_1 SSE4_2 (2 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 (1 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX AVX (8 files): + SSSE3 SSE4_1 POPCNT SSE4_2 AVX AVX2 (37 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2 AVX512_SKX (8 files): + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2 AVX_512F AVX512_COMMON AVX512_SKX C/C++: Built as dynamic libs?: YES C++ standard: 11 C++ Compiler: C:/Program Files/Microsoft Visual Studio/2022/Professional/VC/Tools/MSVC/14.36.32532/bin/Hostx64/x64/cl.exe (ver 19.36.32532.0) C++ flags (Release): /DWIN32 /D_WINDOWS /W4 /GR /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi /fp:precise /EHa /wd4127 /wd4251 /wd4324 /wd4275 /wd4512 /wd4589 /wd4819 /MP /MD /O2 /Ob2 /DNDEBUG C++ flags (Debug): /DWIN32 /D_WINDOWS /W4 /GR /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi /fp:precise /EHa /wd4127 /wd4251 /wd4324 /wd4275 /wd4512 /wd4589 /wd4819 /MP /MDd /Zi /Ob0 /Od /RTC1 C Compiler: C:/Program Files/Microsoft Visual Studio/2022/Professional/VC/Tools/MSVC/14.36.32532/bin/Hostx64/x64/cl.exe C flags (Release): /DWIN32 /D_WINDOWS /W3 /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi /fp:precise /MP /MD /O2 /Ob2 /DNDEBUG C flags (Debug): /DWIN32 /D_WINDOWS /W3 /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi /fp:precise /MP /MDd /Zi /Ob0 /Od /RTC1 Linker flags (Release): /machine:x64 /INCREMENTAL:NO Linker flags (Debug): /machine:x64 /debug /INCREMENTAL ccache: NO Precompiled headers: NO Extra dependencies: 3rdparty dependencies: OpenCV modules: To be built: aruco bgsegm bioinspired calib3d ccalib core datasets dnn dnn_objdetect dnn_superres dpm face features2d flann fuzzy gapi hfs highgui img_hash imgcodecs imgproc intensity_transform line_descriptor mcc ml objdetect optflow phase_unwrapping photo plot python3 quality rapid reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking ts video videoio videostab wechat_qrcode world xfeatures2d ximgproc xobjdetect xphoto Disabled: - Disabled by dependency: - Unavailable: alphamat cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev cvv freetype hdf java julia matlab ovis python2 python2 sfm viz Applications: tests perf_tests apps Documentation: NO Non-free algorithms: NO Windows RT support: NO GUI: Win32 UI: YES VTK support: NO Media I/O: ZLib: build (ver 1.2.13) JPEG: build-libjpeg-turbo (ver 2.1.3-62) SIMD Support Request: YES SIMD Support: NO WEBP: build (ver encoder: 0x020f) PNG: build (ver 1.6.37) TIFF: build (ver 42 - 4.2.0) JPEG 2000: build (ver 2.5.0) OpenEXR: build (ver 2.3.0) HDR: YES SUNRASTER: YES PXM: YES PFM: YES Video I/O: DC1394: NO FFMPEG: YES (prebuilt binaries) avcodec: YES (58.134.100) avformat: YES (58.76.100) avutil: YES (56.70.100) swscale: YES (5.9.100) avresample: YES (4.0.0) GStreamer: NO DirectShow: YES Media Foundation: YES DXVA: YES Parallel framework: Concurrency Trace: YES (with Intel ITT) Other third-party libraries: Intel IPP: 2021.8 [2021.8.0] at: C:/_develop_lib/opencv_build/4.8.0/3rdparty/ippicv/ippicv_win/icv Intel IPP IW: sources (2021.8.0) at: C:/_develop_lib/opencv_build/4.8.0/3rdparty/ippicv/ippicv_win/iw Lapack: NO Eigen: NO Custom HAL: NO Protobuf: build (3.19.1) Flatbuffers: builtin/3rdparty (23.5.9) OpenCL: YES (NVD3D11) Include path: C:/_develop_lib/opencv/opencv-4.8.0/3rdparty/include/opencl/1.2 Link libraries: Dynamic load Python 3: Interpreter: C:/_tool/anaconda3/python.exe (ver 3.10.9) Libraries: C:/_tool/anaconda3/libs/python310.lib (ver 3.10.9) numpy: C:/_tool/anaconda3/lib/site-packages/numpy/core/include (ver 1.23.5) install path: C:/_tool/anaconda3/Lib/site-packages/cv2/python-3.10 Python (for build): C:/_tool/anaconda3/python.exe Java: ant: NO Java: NO JNI: NO Java wrappers: NO Java tests: NO Install to: C:/_develop_lib/opencv_build/4.8.0/install
PythonのところにAnaconda3の設定が表示されちゃってますが、別件で遊んでたのが読み込まれちゃっただけなので気にしないでください。
このように「Generating done」が表示されたら、「Where to build the binaries:」で指定したパスに「OpenCV.sln」ができています。
いよいよビルド作業です。
「OpenCV.sln」を開き、「ビルド>バッチビルド」を選択、「ALL_BUILD」と「INSTALL」を探し、それぞれ「Debug」と「Release」の両方(計4か所)にチェックを入れたら「ビルド」をクリックするだけです。
あとは終わるのを待つだけです。
エラーさえ無ければ大丈夫なことが多いです。
なお、今回は以下のようなエラーがありましたが、Pythonを使う気は全く無いので無問題として無視します。
「CMAKE_INSTALL_PREFIX」で設定したパスに成果物ができているはずですので、本番利用するつもりの場所(あとでパスを通します)に配置します。
私の環境ですと(わかりやすさのために3階層目以下は省略していますが)以下のような配置になっています。
C:\opencv\4.8.0>tree | findstr /R /C:"^├" /C:"^│ ├" /C:"^│ └" /C:"^└" ├─bin ├─etc │ ├─haarcascades │ ├─lbpcascades │ └─licenses ├─include │ └─opencv2 └─x64
キーボードでWin+pauseを押し、「システムの詳細設定」から「環境変数」を選択します。
「Path」を選択して「編集」をクリックし、以下のように設定すれば完了です。
あとは、以下を参考にプロジェクト側で設定すれば準備完了です。
動作確認として、以下のコードを実行しました。
#include<opencv2/opencv.hpp> #include<iostream> #include<string> #include<filesystem> namespace fs = std::filesystem; int main() { std::cout << cv::getBuildInformation(); fs::path imgPath = "lena512.jpg"; cv::Mat srcImg = cv::imread(imgPath.string()); std::string wnd_name = "image"; cv::namedWindow(wnd_name, cv::WINDOW_AUTOSIZE | cv::WINDOW_KEEPRATIO | cv::WINDOW_GUI_NORMAL); while (true) { cv::imshow(wnd_name, srcImg); int key = cv::waitKey(1); if (key == 27) { break; } } cv::destroyWindow(wnd_name); return 0; }