👻

openCVのインクルードパス

2024/10/22に公開

はじめに

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