はじめに
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で追加していることを確認してください。
リンクエラーを直す
これでコンパイルできると思いきや、次はこのようなエラーが出てしまいました。
undefined reference to cv::VideoCapture::VideoCapture(int)
この原因はリンクが上手くできていないことです。
「Build Phases」の「Link Binary With Libraries」にライブラリを加えます。
フォルダで/usr/local/Cellar/opencv/4.1.0_2/lib/
を開き、エイリアスでない.dylibファイルを全てドラッグ&ドロップします。
サンプルコード
#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;
}
結果
無事OpenCVを使うことができました。
まとめ
もとはと言えば検索して上に出てきたからと言って記事の日付も確認しなかったのがいけませんでした。環境構築はバージョンの違いによるエラーが多いので、参考記事のバージョンを確認するよう意識しようと思います。