OpenCV を自前ビルドして opencv-rust から使う件
Manjaro と ubuntu (WSL2) でバージョンが違って,一部引数の個数が違ったりしてアレだったので,WSL 用にビルドしたうえで,opencv-rust に使ってもらおうというやつ.apt
で入った 古い opencv がすでに入っている状態からのスタートだった.
ビルド
- これは割と単純.opencv には opencv_contrib という,追加のモジュール群を合わせたのがあるので,これも合わせて用意する.
- 公式のインストールのチュートリアル にほぼ沿えばよいが,今後のアップデートのことも考えて zip じゃなくて git で clone しておく.両方 github にあって,今回は tag
4.11.0
に checkout した. - また,この後 rust から使う際に必要になるので,pkgconfig も作ってもらうようにする.opencv と opencv_contrib を同じディレクトリで clone していた場合は,自分で作った
opencv/build
の下からこんな感じ
cmake -DOPENCV_GENERATE_PKGCONFIG=ON -DOPENCV_EXTRA_MODULES_PATH="../../opencv_contrib/modules" ../
- このあたりは OpenCV configuration options reference に詳しい.
- あとは
make
してsudo make install
でとりあえずはOK.
rust からの利用
- いくつか環境変数の設定の必要がある.
- ここでさっき作った pgkcfg が効いてきて, たぶん opencv-rust が pkgconfig を使ってバージョンを判定しているところがあって,ここで間違えて apt 側の (
/usr/include
の) バージョンを見てしまって食い違ってるよってなったのは,上記の-DOPENCV_GENERATE_PKGCONFIG=ON
で解消した.OpenCV version from the headers: (at /usr/local/include/opencv4/) must match version of the OpenCV library (include paths: ["/usr/local/include/opencv4/"])
といって怒られる.
- 最終的に加えたのは以下.全部要るのか・これが本当に正解なのかはよく知らない.
export OPENCV_DIR="/usr/local/lib/cmake/"
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig"
export LD_LIBRARY_PATH="/usr/local/lib/"
export OPENCV_LINK_PATHS="/usr/local/lib"
export OPENCV_INCLUDE_PATHS="/usr/local/include/opencv4/"
確認
- 新たな(じゃなくてもいいけど)プロジェクトで,opencv::core::CV_VERSION を print させて望みのものが出たらOK.