OpenCVのコンパイルオプションを簡単にする

gcc(g++)でOpenCVのプロジェクトをコンパイルするときのオプションをpkg-configを使用して簡素化します。
同時にインストールディレクトリの違いによる、機種依存性も解消できます。

pkg-config

pkg-configコマンドはパッケージのコンパイルオプションを出力するコマンドです。
pkg-configにコンパイルオプションの出し方を設定しておけば、pkg-configでパッケージを指定することにより、コンパイルオプションを出力してくれます。
コマンド内でpkg-configコマンドをバッククォートで囲むことにより、pkg-configの結果をコマンド内に反映できます。
g++ ‘pkg-configコマンド’ →g++ pkg-configコマンド結果
のようになります。

pkg-config設定

pkg-configでopencvの内容を出力するには設定が必要です。
OpenCVをインストールしたディレクトリを/usrとします。
/usr/lib/pkgconfigにはいります。pkgconfigディレクトリがなければ作成してください。

pkgconfig内に以下のような内容で、opencv.pcという名前のファイルを作成します。

Package Information for pkg-config

prefix=/usr
exec_prefix=${prefix}
includedir_old=${prefix}/include/opencv4/opencv
includedir_new=${prefix}/include/opencv4
libdir=${exec_prefix}/lib

Name: opencv
Description: The opencv library
Version: 4.4.0
Libs: -L${exec_prefix}/lib -lopencv_dnn -lopencv_gapi -lopencv_highgui -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_video -lopencv_calib3d -lopencv_features2d -lopencv_flann -lopencv_videoio -lopencv_imgcodecs -lopencv_imgproc -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir_old} -I${includedir_new}

LibとCflagsの内容はOpenCVのバージョンによって変更がある場合があります。記載したファイルの対象バージョンは4.4.0です。

コンソールで以下のコマンドを実行してください。
実行結果が下記のようopencv.pc内の情報が参照できていれば成功です。

$ pkg-config –cflags opencv
-I/usr/include/opencv4/opencv -I/usr/include/opencv4
$ pkg-config –libs opencv
-L/usr/lib -lopencv_dnn -lopencv_gapi -lopencv_highgui -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_video -lopencv_calib3d -lopencv_features2d -lopencv_flann -lopencv_videoio -lopencv_imgcodecs -lopencv_imgproc -lopencv_core

実際にpkg-configを使用してコンパイルしてみる

適当な場所で、cvtest.cppというファイルを作ります。

#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgcodecs.hpp>

int main() {
    cv::Mat m = cv::imread("sample.png", 1);
    cv::namedWindow("sample", cv::WINDOW_AUTOSIZE);
    cv::imshow("sample", m);
    cv::waitKey(0);
    cv::destroyAllWindows();

    return 0;
}

下記コマンドでコンパイルします。

$ g++ cvtest.cpp -o cvtest -std=c++11 ’pkg-config –cflags opencv’ ‘pkg-config –libs opencv’

コンパイルが通れば成功です。
これで、ビルドコマンドのインストールディレクトリを隠蔽することができました。
pkg-configコマンドはmakefileでも使用することができます。

参考URL

https://qiita.com/t13m082h/items/c0482b87712f1d78a0f9
http://www.yasutomo57jp.com/2010/09/01/linux%E3%81%A7opencv%E3%82%92%E5%85%A5%E3%82%8C%E3%81%A6%E9%81%A9%E5%BD%93%E3%81%AA%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB%E3%81%99%E3%82%8B%E3%81%BE%E3%81%A7/
https://qiita.com/hsmtknj/items/0f56e3317cd0f2ae056a

作成:松林雄一