はじめに
MacでC++プログラミングをするときにOpenCVが必要になったので,Homebrewでインストールし,VSCodeでコーディングできる環境を作ったので,そのメモとしての記事です.Pythonを使った記事はたくさんありますが,案外C++の話がなかったので(大して苦労しないからなのでしょうか?).
前提として,Homebrewやcmakeが既にインストールされていて,C++のHello Worldはコンパイルできる環境が整っているとします.
環境
使用した環境は以下の通りです.
- OS: macOS Mojave 10.14.4
- Mac: MacBook Pro 13-inch, Late 2012
- Homebrew 2.1.1
インストール
Homebrewが入っていれば,以下のコマンドで簡単にOpenCVをインストールすることができます.
$ brew install opencv
これでインストールは完了です.
インストールパッケージをopencvとだけするとその時点でインストール可能な最新版がインストールされます.記事執筆時点では,4.1.0でした.
$ brew list --versions | grep opencv
opencv 4.1.0_1
他のバージョンが欲しい場合
OpenCV2やOpenCV3が必要な場合は,
$ brew install opencv@2
$ brew install opencv@3
のようにすればインストールできます.
以下のようにすればインストール可能なバージョンがわかります.
opencvでインストールしたので,
$ brew search opencv
==> Formulae
opencv ✔ opencv@2 opencv@3
VSCodeの設定
VSCodeではIntelliSenseを使うためにはc_cpp_properties.jsonのincludePathにOpenCVのパスを設定する必要があります.
{
"configurations": [
{
"name": "Mac",
"includePath": [
"${workspaceFolder}/**",
"/usr/local/include/opencv4"
],
"defines": [],
"macFrameworkPath": [],
"compilerPath": "/usr/local/bin/gcc-8",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
OpenCVを使うときに必ずインクルードする"opencv2/opencv.hpp"は
/usr/local/Cellar/opencv/4.1.0_1/include/opencv4/opencv2
に存在しますが,以下の場所に自動的にシンボリックリンクが張られますので,VSCodeに設定するパスは,こちらの短い方でOKです.
/usr/local/include/opencv4
テストする
OpenCVがインストールできたので,テストしてみます.CMakeListsは以下のようにしました.
cmake_minimum_required(VERSION 3.0)
# コンパイルに必要なソースコードを取得(それぞれの環境に合わせる)
file(GLOB my_src ../src/*.cpp)
# インクルードパスの設定(これもそれぞれの環境に合わせる)
include_directories(../head)
# コンパイラへのオプション
set(CMAKE_CXX_FLAGS "-std=c++0x -O3")
# コンパイル対象コードと出力ファイル名
# 余計なファイルが存在したので修正しました(2019/04/25)
add_executable(main ${my_src})
# OpenCVに必要(Linuxの場合)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(main ${OpenCV_LIBS})
試しに,jpeg画像を読み込んで表示するだけのプログラムを実行してみます.
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
int main()
{
cout << "start" << endl;
cv::Mat img = cv::imread("umbrella.jpg"); //読み込ませたい画像ファイル名
if(img.empty()) return -1;
cv::namedWindow("hogehoge", cv::WINDOW_AUTOSIZE); //Windowのタイトルとサイズ設定
cv::imshow("hogehoge", img);
cv::waitKey(0);
cv::destroyAllWindows();
cout << "Finish" << endl;
}
これで画像が表示されればOKです.
パッケージ不足
インストールしてコンパイルまではできたのですが,実行時に何かライブラリが無いとかでプログラムが動きませんでした.私の場合は,"glog"なるパッケージが足りなかったようなので,やはりhomebrewでインストールしたら動きました.
$ brew install glog
おわりに
MacでHomebrewを使ってOpenCVをインストールし,C++の簡単なコードを走らせてみました.VSCodeの設定も案外忘れてしまいがちなので,残しておきました.なお,記事執筆時ではOpenCV4がリリースされており,新しい機能を使うことができそうです.
この記事はC++環境のことだけ考慮していますので,Pythonから使う場合については私は全く未確認ですので,他の記事を参照されることをお勧めします.