ダウンロードした OpenCV の bin フォルダに DLL 入ってなくね?Lib はどこ…?
え、自分でビルドするんだよ、え、マジで?
まぁ、C++er なら普通のことですが…
…という事でまぁこういった事はプロジェクト初期には割と毎回発生する、というか、Windows民は大抵のライブラリは自分でビルドしてLibとDLLを作成することになるので手順をまとめてみました。
実行環境
今回の実験環境は以下の通りです。
- Windows10
- VisualStudio2019
- OpenCV 4.5.2
- CMake 3.20.3が導入済みで環境変数にパスが通っている事
CMakeあたりの手順なほかのプロジェクトにも汎用で使えるので、OpenCVじゃなくて大体イケます。
OpenCVの準備
まず、OpenCV のサイトからパッケージをダウンロードしてきます。
Library > Releases を選択して OpenCV 4.5.2 の Windows をクリックしてパッケージをダウンロードします。
通常、SourceForge にリダイレクトされダウンロードが自動で始まるので終わるまで待ちます。
自己解凍形式の実行形式ファイル「opencv-4.5.2-vc14_vc15.exe」がダウンロードされているのでこれを実行します。
解答場所は適当ですが今回は「C:\temp」を指定します。なんか解凍がかなり遅いので7zipとかで展開しても良いです。(exeですがzipのように解凍できます)
CMakeでVisualStudio用のソリューションを作成する
CMake の GUI を使って VisualStudio 用のソリューションを作成します。
CMakeのフォルダに cmake-gui.exe というツールが入っているので起動します。
ツールを起動したら以下のように入力し「Configure」ボタンを押します。
「Where is the source code」に「C:/temp/opencv/sources」を指定します。これは「CMakeLists.txt」がある場所です。
次に「Where to build the binaries」に「C:/temp/opencv/build-self」を指定します。慣例で「build」とする事が多いですが OpenCV の場合既に存在するため新しい別のフォルダを用意します。
ボタンを押すと以下のような次に生成するプロジェクトの種類を選ぶダイアログが表示されるので次のように入力します。
「Specify the generator for this project」は「Visual Studio 16 2019」を選択します。
次に64bit版にしたいので「Optional platform for generator」に「x64」を指定します。空白で何も指定しないと「Win32」で32bit版となります。
で「Finish」を押すとツールが動き始めますが、少し時間がかかるので終わるまで待ちます。
完了すると以下のように表示が変わりますがオプションを変更したい場合チェックボックスの ON/OFF で指定できますが今回はそのまま「Generate」をクリックします。
VisualStudio2019からビルドする
上記の手順で「C:\temp\opencv\build-self」に「OpenCV.sln」が作成されているのでこれを開くと VS2019 でソリューションが開くのでそのまま Debug/Release でビルドします。
割と時間がかかるの opencv_test とか opencv_perf はビルドしないでも良いです。
ビルドが完了すると
「bin」の中にDLL、「lib」の中にLibファイルがそれぞれ生成されるのでパスを通したり環境に配置したりすればOKです。
デバッグビルドには末尾にdがついているものが生成されていると思います。
ソリューションからコードがプロジェクトごとに整理されて閲覧できるので何かあったときは参照することになります。(API呼び出しエラーとか起きると割と見たりします)
CMakeのGUIツールについて
CMake の GUI ツールは CMakeList.txt があるものには大抵の場合適用できるので Win だとビルドがすごく簡単。
参考サイト
第8回 初めてのOpenCV開発 ― CMakeを使ったOpenCVのカスタマイズ【OpenCV 3.1.0】
生成されるファイル
以下自分用メモ。
opencv_coreXXX.dllが無い…無い…みたいなゾンビにならないように。
XXXはバージョンが入る。ソリューションと同じ階層に生成される。
binフォルダ内
DLLとかEXEが入っている
Debug
opencv_calib3d452d.dll opencv_core452d.dll opencv_dnn452d.dll opencv_features2d452d.dll opencv_flann452d.dll opencv_gapi452d.dll opencv_highgui452d.dll opencv_imgcodecs452d.dll opencv_imgproc452d.dll opencv_ml452d.dll opencv_objdetect452d.dll opencv_photo452d.dll opencv_stitching452d.dll opencv_video452d.dll opencv_videoio_ffmpeg452_64.dll opencv_videoio452d.dll opencv_annotationd.exe opencv_interactive-calibrationd.exe opencv_model_diagnosticsd.exe opencv_version_win32d.exe opencv_versiond.exe opencv_visualisationd.exe
Release
opencv_calib3d452.dll opencv_core452.dll opencv_dnn452.dll opencv_flann452.dll opencv_gapi452.dll opencv_highgui452.dll opencv_imgcodecs452.dll opencv_imgproc452.dll opencv_ml452.dll opencv_objdetect452.dll opencv_photo452.dll opencv_stitching452.dll opencv_video452.dll opencv_videoio452.dll opencv_videoio_ffmpeg452_64.dll opencv_features2d452.dll opencv_annotation.exe opencv_interactive-calibration.exe opencv_model_diagnostics.exe opencv_version.exe opencv_version_win32.exe opencv_visualisation.exe
libフォルダ内
ソリューションと同じ階層にある。LibファイルとExpファイルが入っている。
Debug
opencv_calib3d452d.lib opencv_core452d.lib opencv_dnn452d.lib opencv_features2d452d.lib opencv_flann452d.lib opencv_gapi452d.lib opencv_highgui452d.lib opencv_imgcodecs452d.lib opencv_imgproc452d.lib opencv_ml452d.lib opencv_objdetect452d.lib opencv_photo452d.lib opencv_stitching452d.lib opencv_ts452d.lib opencv_video452d.lib opencv_videoio452d.lib
Release
opencv_calib3d452.lib opencv_core452.lib opencv_dnn452.lib opencv_features2d452.lib opencv_flann452.lib opencv_gapi452.lib opencv_highgui452.lib opencv_imgcodecs452.lib opencv_imgproc452.lib opencv_ml452.lib opencv_objdetect452.lib opencv_photo452.lib opencv_stitching452.lib opencv_ts452.lib opencv_video452.lib opencv_videoio452.lib