はじめに
OpenCVの公式サイトには、プレビルドされたOpenCVのライブラリが公開されています。
https://opencv.org/releases/
当然、Windows版も公開されていますが、Visual Studio用のプレビルドしかありません。
おじさんのように、C++コンパイラにMinGW-w64を使っている人はABIが違うため、Visual Studio用のプレビルドを使うことができません。
MinGW-w64でOpenCVを使うには、自分でOpenCVのライブラリをビルドする必要があるので、今回はMinGW-w64でOpenCV4.10のビルドに挑戦してみました。
準備
OpenCVをビルドする前に、MinGW-w64やcmakeのインストールが必要です。
以下のサイトを参考にMinGW-w64やcmakeをインストールします。
MinGW-w64のインストール
https://qiita.com/yomei_o/items/2e706a5fa3ac5ffc3a50
cmakeのインストール
https://qiita.com/matskeng/items/c466c4751e1352f97ce6
ダウンロード
OpenCVの公式GitHubから執筆時点で最新のバージョンである、opencv-4.10.0.zipをダウンロードします。
https://github.com/opencv/opencv/tree/4.10.0
ダウンロードが終わったら、opencv-4.10.0.zipを任意のフォルダに解凍します。
今回は例として、opencv-4.10.0.zipを「C:\prog」で解凍し、「C:\prog\opencv-4.10.0」ができました。
ビルド
LinuxやMACであればshellで以下のコマンドを入力すればOpenCVがビルドできます。
cd opencv-4.10.0
mkdir build
cd build
cmake ..
make
sudo make install
今回は、MinGW-w64を使ってビルドを行うので一工夫が必要です。
工夫と言ってもcmakeを使ったクロスコンパイルの一般的な方法と同じです。
コマンドオプションに「-G」と「-DCMAKE_CXX_COMPILER」と「-DCMAKE_C_COMPILER」を付け、cmakeにコンパイラとmakeの方式を指定するだけです。
コマンドプロンプトで以下のコマンド実行します。
cd opencv-4.10.0
mkdir build
cd build
cmake -DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++ -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc -G "MinGW Makefiles" ..
make
make install
このような感じでMinGW-w64を使ってOpenCVをビルドすることができます。
しばらくするとMinGW-w64用のOpenCVがビルドされます。
本来、ここで終了なのですが、Windowsだと次に説明する特殊な設定がOpenCVライブラリを使うときに必要になります。
ライブラリ使用時の環境設定
LinuxやMACであればライブラリのビルド時に「make install」を行うと「/usr/local」などにライブラリファイルとヘッダーファイルがコピーされます。
しかしWindowsでは、ビルドしたディレクトリに「install」というフォルダが作られ、そこにライブラリファイルとヘッダーファイルがコピーされます。
今回の場合「C:\prog\opencv-4.10.0\build\install」にビルドした成果物がコピーされています。
さらにWindowsだと、ビルドしたOpenCVを使う場合、環境変数「OpenCV_DIR」にこのインストールパスを指定しないといけません。
今回の場合、コマンドプロンプトで以下のように設定します。
set OpenCV_DIR=C:\prog\opencv-4.10.0\build\install
ビルドしたOpenCVライブラリを使う
ビルドしたOpenCVライブラリを使ってみます。
まず、「test」フォルダを作成します。
mkdir test
そして、その中に2個のファイル「CMakeLists.txt」と「hello.cpp」を作ります。
CMakeLists.txt
cmake_minimum_required(VERSION 3.13)
project(test_cmake CXX C)
find_package(OpenCV REQUIRED)
add_executable(test hello.cpp)
target_include_directories(test PRIVATE ${OpenCV_INCLUDE_DIRS})
target_link_libraries (test PRIVATE gdi32 comdlg32 ${OpenCV_LIBS})
hello.cpp
#include <cstdio>
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat mat;
printf("opencv ok\n");
return 0;
}
ビルド方法はOpenCVのライブラリをビルドした時とほとんど同じです。
cd test
mkdir build
cd build
set OpenCV_DIR=C:\prog\opencv-4.10.0\build\install
cmake -DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++ -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc -G "MinGW Makefiles" ..
make
これでビルドが成功すれば終了です。
C:\prog\test>mkdir build
C:\prog\test>cd build
C:\prog\test\build>set OpenCV_DIR=C:\prog\opencv-4.10.0\build\install
C:\prog\test\build>cmake -DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++ -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc -G "MinGW Makefiles" ..
-- The CXX compiler identification is GNU 14.2.0
-- The C compiler identification is GNU 14.2.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/prog/w64devkit/bin/x86_64-w64-mingw32-g++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/prog/w64devkit/bin/x86_64-w64-mingw32-gcc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- OpenCV ARCH: x64
-- OpenCV RUNTIME: mingw
-- OpenCV STATIC: OFF
-- Found OpenCV: C:/prog/opencv-4.10.0/build/install (found version "4.10.0")
-- Found OpenCV 4.10.0 in C:/prog/opencv-4.10.0/build/install/x64/mingw/lib
-- You might need to add C:/prog/opencv-4.10.0/build/install/x64/mingw/bin to your PATH to be able to run your applications.
-- Configuring done
-- Generating done
-- Build files have been written to: C:/prog/test/build
C:\prog\test\build>make
[ 50%] Building CXX object CMakeFiles/test.dir/hello.cpp.obj
[100%] Linking CXX executable test.exe
[100%] Built target test
C:\prog\test\build>test.exe
opencv ok
ビルドしたexeファイルを実行するときは、OpenCVのdll(ダイナミックリンクライブラリ)が必要です。
OpenCVのインストールディレクトリの「x64\mingw\bin」にdllがあるので、「libopencv_core4100.dll」などを必要に応じてexeファイルが置いてあるディレクトリにコピーします。
僕の場合「C:\prog\opencv-4.10.0\build\install\x64\mingw\bin」にdllがありました。
これを、「C:\prog\test\build」にコピーしました。
以上がWindowsでOpenCVをMinGW-w64でビルドする手順です。
おまけ
Visual Studio Codeなどを追加でインストールし、C++の設定をすれば、WindowsでIDEを使った高度なデバッグを行うこともできます。
F9キーでブレイクポイントなども設定できるので、Visual Studio Communityと同じように使うことができます。
VSCodeでC++のcmakeビルド環境構築
https://qiita.com/JuvenileTalk9/items/fbb09d43051995bb5350