#背景
Windows環境でOpenCVのスクリプトを書いていた時は、VisualStudioだったので設定でincludeフォルダとlibフォルダのそれぞれのパスと必要なlibファイルを設定すればビルドすることはできます。
この5年くらいはmacでの開発が多かったので、OpenCVをすぐ使いたいと思った時にPythonを使って pip install opencv-python
でパッケージをインストールすれば使っています。
で、C++でmacで使おうと思った時にどうやってダウンロードと設定すればいいのかがよくわからんかったのでまとめてみました。
#方法
Homebrewを使ってopenCVをインストールする
brew install opencv
/usr/local/Cellar/opencv/
配下にダウンロードされます。 includeフォルダパスは /usr/local/Cellar/opencv/4.1.1_2/include/opencv4/
、 libフォルダパスは /usr/local/Cellar/opencv/4.1.1_2/lib/
でそれぞれにヘッダーファイルとlibファイルが格納されています。
表示に使う画像
コードを作成する
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/highgui.hpp>
int main(int argc, const char* argv[]) {
//モノクロ画像で格納
cv::Mat image = cv::imread("./mikan.jpg" , 0);
if (image.empty()) {
std::cout << "read error.\n";
return -1;
}
while (true){
const int key = cv::waitKey(1);
//[q] を押すと終了
if (key == 'q'){
break;
}
cv::namedWindow("Image", cv::WINDOW_AUTOSIZE);
cv::imshow("Image", image);
}
cv::destroyAllWindows();
return 0;
}
makefile を作成する
コマンドでパスの設定をする必要があるので下記のコマンドを打って出力ファイルを作成することができます。
c++ main.cpp -o main -I/usr/local/Cellar/opencv/4.1.1_2/include/opencv4/ \
-std=c++11 \
-L/usr/local/Cellar/opencv/4.1.1_2/lib/ \
-lopencv_core -lopencv_highgui -lopencv_imgcodecs
毎回このコマンドを打ってデバッグするのは結構面倒です。ここにopencv以外の外部ファイルを追加したい場合はこれよりも長くなります。長くなるとどこでビルドがエラーになっているかわかりにくい
なのでmakefileを作ってマクロ化します。
CXX = c++
CXXFLAGS = -I/usr/local/Cellar/opencv/4.1.1_2/include/opencv4/
LDFLAGS = -L/usr/local/Cellar/opencv/4.1.1_2/lib/
LDLIBS = -lopencv_core -lopencv_highgui -lopencv_imgcodecs
CXXVERSION = -std=c++11
main: main.cpp
$(CXX) $< -o $@ $(CXXFLAGS) $(CXXVERSION) $(LDFLAGS) $(LDLIBS)
clean :
rm main
CXXVERSION = -std=c++11
とあるのですが、最新のopenCV4系では明示する必要があります。c++の構文がc++11
、c++14
、c++17
とバージョンアップしていてopenCVの構造がc++11以上の構文で書かれているっぽいです。そのため指定しないとエラーになります。
makefileができれば make
コマンドだけで出力ファイルが作られます。
make
./main
結果
キーボード[q]を押すと閉じます。
おわり
makefileあるとコマンド一つなので楽です。
#参考になりそうなリンク
-
IDEを使わずにOpenCVを使ったC++ソースファイルをビルドする
- タイトルがそれっぽいのですが書き方はあまり参考にしていないです。
-
waifu2x を OSX で動かしたメモ
- 題材はOpenCVではないですがこっちが参考になります。