【OpenCV】 Macで開発環境を整えて図面を描画する方法
🚀 やりたいこと
MacOS上でOpenCVを利用して図形を描画したい。それには環境構築が必要になる。
やったことの概要としては、Homebrew
で OpenCV
をインストール。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.html の Code と書いてあるサブタイトルのしたのコードを利用する。
コピーしたら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: Installation in MacOS, 入手先 https://docs.opencv.org/master/d0/db2/tutorial_macos_install.html
- MacにOpenCV4をインストールする(C++) - Qiita, 入手先 https://qiita.com/HoriThe3rd/items/2829463cd5bfe5cba03f
- macのターミナルでC++をコンパイル&実行する方法 | βshort Lab, 入手先 https://teratail.com/questions/41320#reply-66468
- 処理系 - cpprefjp C++日本語リファレンス, 入手先 https://cpprefjp.github.io/implementation.html
- OpenCVのコンパイルエラー|teratail, 入手先 https://teratail.com/questions/167878#reply-250373