1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Mac環境でOpenCVをmakefileを使ってコンパイルする方法

Posted at

#背景
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ファイルが格納されています。

表示に使う画像

mikan.jpg
みかん星人です。

コードを作成する

#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以外の外部ファイルを追加したい場合はこれよりも長くなります。長くなるとどこでビルドがエラーになっているかわかりにくい :tired_face:
なので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++11c++14c++17とバージョンアップしていてopenCVの構造がc++11以上の構文で書かれているっぽいです。そのため指定しないとエラーになります。

makefileができれば make コマンドだけで出力ファイルが作られます。

make
./main

結果

スクリーンショット 2019-10-13 19.17.19.png

キーボード[q]を押すと閉じます。

おわり

makefileあるとコマンド一つなので楽です。

#参考になりそうなリンク

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?