👻
openCVのインクルードパス
はじめに
courseraの課題でc++でopenCVを用いたコードを書こうとした。
教授が書いたサンプルコードをコンパイルしようとしたら、openCVのヘッダのインクルードでNo such file or directoryのエラーになった
原因
c++用openCVのヘッダファイルがあるパスはopenCV2かopenCV4かによって異なるらしい。
サンプルコードはopenCV2で書かれていて、その場合のインクルードパスは例えば以下のようになる。
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
これがopenCV4だと以下のように変更する必要があるらしい。
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
対策
もちろんある1つのPCでしか使わないなら、そのPCにインストールされているバージョンを調べて対応する方をインクルードすればいいが、可搬性を意識するならPCに入っているopenCVのバージョンによって自動で切り替えられるようにしたい。
そのためには、CV_VERSION_MAJORというマクロを参照すれば良い。
これはopencv2/core/version.hppに定義されているので、最初にこれをインクルードした上で、上記マクロの値によってインクルードするファイルを分ければ良い。
#include <opencv2/core/version.hpp>
#if CV_VERSION_MAJOR >= 4
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#else
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#endif
終わりに
enumなどもバージョン4で変わっているものが結構あるので、同様に対応しましょう。
Discussion