Help us understand the problem. What is going on with this article?

MacにOpenCV4をインストールする(C++)

はじめに

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から使う場合については私は全く未確認ですので,他の記事を参照されることをお勧めします.

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away