Posted at

XcodeでOpenCVのヘッダーファイルが読み込めない時


はじめに

XcodeでOpenCVを使おうと思い、こちらのサイトを参考にさせて進めたのですが、エラーが出てしまったので、その時の解決法について書いておきます。


環境

OpenCV:4.1.0

Xcode:10.2.1


ヘッダーファイル

まずヘッダーファイルについてですが、記事を参考にして以下のようにするとエラーが出ました。

// これだとエラーが出る

#include <cv.h>
#include <highgui.h>
#include <ctype.h>

opencv/cv.h' file not foundとエラーが出てしまいました。

実はこれはOpenCVのバージョン2.1までで2.2以降は以下のようにします。

#include <opencv2/opencv.hpp>

これでとりあえずエラーは消えるはずです。

もしこれでもエラーが出る場合は「Build Setting」の

「Search Paths」 > 「Header Search Paths」を確認してみてください。

/usr/local/Cellar/opencv/4.1.0_2/includeをrecursiveで追加していることを確認してください。

image.png


リンクエラーを直す

これでコンパイルできると思いきや、次はこのようなエラーが出てしまいました。

undefined reference to cv::VideoCapture::VideoCapture(int)

この原因はリンクが上手くできていないことです。

「Build Phases」の「Link Binary With Libraries」にライブラリを加えます。

フォルダで/usr/local/Cellar/opencv/4.1.0_2/lib/を開き、エイリアスでない.dylibファイルを全てドラッグ&ドロップします。

image.png


サンプルコード

#include <opencv2/opencv.hpp>

#include <iostream>

using namespace cv;

int main(){
cv::Mat imMat(256,256, CV_8UC3);

for(int y = 0 ; y < imMat.rows; y++){
for(int x = 0 ; x < imMat.cols; x++){
cv::Vec3b &p = imMat.at<cv::Vec3b>( y, x);
p[0] = x;
p[1] = y;
p[2] = (int)((x+y)/2);
}
}
imshow("openCVTest",imMat);
waitKey(0);
return 0;
}


結果

image.png

無事OpenCVを使うことができました。


まとめ

もとはと言えば検索して上に出てきたからと言って記事の日付も確認しなかったのがいけませんでした。環境構築はバージョンの違いによるエラーが多いので、参考記事のバージョンを確認するよう意識しようと思います。


参考