tomatoaiu の Tech Blog

プログラミングやツールについてのまとめブログ

【OpenCV】 Macで開発環境を整えて図面を描画する方法

🚀 やりたいこと

MacOS上でOpenCVを利用して図形を描画したい。それには環境構築が必要になる。

やったことの概要としては、HomebrewOpenCV をインストール。cmake で c++の図面を描画するソースコードをビルド。 ソースコードには、公式サイトのサンプルコードを利用。テキストエディタは、VSCodeを利用。ビルドしたファイルを実行してサンプルコードが機能することを確認した。

途中で gcc でビルドできないか確かめたが、理解不足で諦め。

🚀 Macでの開発環境構築

いろいろと手作業でやるのは手間がかかるので Homebrew を利用して今回 OpenCV を install する。

各種バージョン

  • 【Mac】: macOS Cataline v10.15.3
  • 【Homebrew】: 2.2.5

OpenCVの導入

Homebrew利用

brew install opencv

Homebrew利用しない

公式サイトにMacへのinstall方法が書いてあるのでこれを行えばいいと思う。 https://docs.opencv.org/master/d0/db2/tutorial_macos_install.html

🚀 OpenCVで画像処理

OpenCV をしっかり導入できたか確認するためサンプルコードを利用して確かめてみる。

各種バージョン

  • 【VS Code】: 1.42.0
  • 【gcc】: Apple clang version 11.0.0 (clang-1100.0.33.17)
  • 【make】: GNU Make 3.81
  • 【cmake】: version 3.16.3

サンプルコードを記入

mkdir opencv-test
cd opencv-test
touch Drawing_1.cpp

利用するサンプルコードには、https://docs.opencv.org/master/d3/d96/tutorial_basic_geometric_drawing.htmlCode と書いてあるサブタイトルのしたのコードを利用する。
コピーしたらDrawing_1.cpp にペースト。

VSCodeでエラー

#include <opencv2/core.hpp> でエラーが表示される。
エラー中身は以下の通り:

#include エラーが検出されました。includePath を更新してください。この翻訳単位 (/Users/username/development/opencv-test/Drawing_1.cpp) では、波線が無効になっています。C/C++(1696)
ソース ファイルを開けません "opencv2/core.hpp"C/C++(1696)

解消するためには、vscode の設定が必要みたい。

mkdir .vscode
touch .vscode/c_cpp_properties.json

c_cpp_properties.json に、こちらの方の設定を貼り付ける。https://qiita.com/HoriThe3rd/items/2829463cd5bfe5cba03f#vscode%E3%81%AE%E8%A8%AD%E5%AE%9A

これでエラーは解消できた。

【失敗】gcc を利用して ソースファイルをビルド

試しに実行には gcc を利用してコンパイルしてみる。

gcc Drawing_1.cpp 

実行すると以下のようなエラーが表示された。

Drawing_1.cpp:6:10: fatal error: 'opencv2/core.hpp' file not found
#include <opencv2/core.hpp>
         ^~~~~~~~~~~~~~~~~~
1 error generated.

opencv2/core.hpp がないと言われている。これは gcc が opencvを認知できていないということだと思う。
これに対処するために、 -I オプションを利用してみる。 (参考リンク)

-I オプションについては、このように書かれている。

-I <dir> Add directory to include search path

では、実際に path を与えた状態で実行してみる。

gcc Drawing_1.cpp -I /usr/local/include/opencv4

実行すると再度エラーが表示される。

In file included from Drawing_1.cpp:6:
In file included from /usr/local/include/opencv4/opencv2/core.hpp:52:
/usr/local/include/opencv4/opencv2/core/cvdef.h:704:4: error: "OpenCV 4.x+ requires enabled C++11 support"
#  error "OpenCV 4.x+ requires enabled C++11 support"

どうやら C++ version 11 を有効化しないといけないらしい。有効化するために、-std=c++11 オプションを付け加える。(参考リンク)

gcc Drawing_1.cpp -std=c++11 -I /usr/local/include/opencv4

これで実行するとエラーが表示される。これの解決方法は要調査。

Undefined symbols for architecture x86_64:
  "cv::moveWindow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, int)", referenced from:
以下略

【成功】cmake を利用して ソースファイルをビルド

gcc を利用したビルドには失敗したため、cmake を利用してみる。(参考リンク)

ディレクトリ構造

ディレクトリ構造を以下のように変更。※ tree コマンドを利用して ファイル構造表示している。

/opencv-test
├── CMakeLists.txt (ファイル)
├── build (ディレクトリ)
└── src (ディレクトリ)
    └── Drawing_1.cpp (ファイル)

CMakeists.txt

project() の引数には、プロジェクト名を記入。add_executable()の引数には、ビルドしたいファイルを指定。

cmake_minimum_required(VERSION 2.8)

set (CMAKE_CXX_STANDARD 11)
project(opencv-test)
add_executable(${PROJECT_NAME} src/Drawing_1.cpp)

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})

cmakeでビルドすると様々なファイルが出力されるので、buildフォルダを利用して、out-of-source ビルドを行う。

cd build
cmake ../
make

結果

ビルドできたら、build フォルダ内に、opencv-test というファイルができている。あとはそれを実行するだけでOK。

./opencv-test

しばらくすると以下の画像が表示される。

opencv-test の 結果
opencv-test の 結果

参考文献