日本時間で6/29の午前2時頃でしょうか、OpenCVのver.4.8.0がReleaseされました。
github.com
自分の備忘録+超初心者にもわかるように・を意識して手順を記録しておこうと思います。
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を使う気は全く無いので無問題として無視します。
エラー
LNK1104
ファイル 'python310_d.lib' を開くことができません。
opencv_python3
C:\_develop_lib\
opencv_build\4.8.0\modules\python3\LINK
1
「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;
}
