2
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

High SierraにOpenCV3.4.1をインストールする

homebrewのOpenCVのオプション設定が無くなる

2017年夏くらいにopencvのオプションがなくなったようでHomebrewではcontribとpython以外のオプション指定でインストールできなくなっていたので自力でインストールします。

There’s no such option because Homebrew builds opencv with contrib by default. All the existing options were removed when opencv was imported into the core repository two weeks ago.

Just use brew install opencv.

関連ライブラリをbrewでインストールする(特にvtkを入れたい)

brew update
brew upgrade
brew install qt5
brew linkapps qt5
brew install git cmake pkg-config eigen numpy jpeg webp ffmpeg jasper openexr libpng libtiff openexr python3 qt5 gstreamer libgphoto2 eigen libtiff ilmbase openexr numpy imagemagick
brew uninstall vtk
brew install vtk --with-python3 --without-python--with-qt

※すでに環境構築済みだったので足りないものもあるかも。またcmakeとimagemagick等は必要ないかも
※vtkのインスートールはソースからmakeするためかなり時間が掛かります

makeの準備

cmake(GUI版)をダウンロードしインストール
https://cmake.org/files/v3.11/cmake-3.11.0-rc1-Darwin-x86_64.dmg

opencv本体とcontribをダウンロード
https://github.com/opencv/opencv/archive/3.4.1.zip
https://github.com/opencv/opencv_contrib/archive/3.4.1.zip

contribは解凍後opencv-3.4.1直下のcontribとしてコピー

cp -r opencv_contrib-3.4.1 opencv-3.4.1/contrib

cmake

souceとbinariesの場所を設定した上でCMAKE_CONFIGURATION_TYPESをReleaseに設定
スクリーンショット 2018-02-27 10.02.42.png

WITH_OPENGLをチェック
スクリーンショット 2018-02-27 10.03.23.png

以下のようにQTの設定を行う、もう一度configureを押した後QtOpenGL_DIRの設定をしもう一度configureを押す。
スクリーンショット 2018-02-27 10.26.19.png

Generateを押し以下のように設定
スクリーンショット 2018-02-27 10.01.16.png

make

opencv-3.4.1/buid以下でmake

make

install

opencv-3.4.1/buid以下でmake install

make install

C++コンパイル時にエラーが出るのでpython関係のライブラリを退避させる
shell-session
cd /usr/local/lib
mkdir python
mv libvtk*Python* python

動作確認

ほぼ
http://whoopsidaisies.hatenablog.com/entry/2013/12/20/232625
の内容なのですが、Perfumeのデータで動作確認を行おうと思ったのですが、ダウンロードにflashが必要?そうで面倒なのでやめました。

以下からteapot.objをダウンロード、ソースと同じディレクトリに設置

ソース(http://whoopsidaisies.hatenablog.com/entry/2013/12/20/232625 をほぼそのままコピー)

main.cpp
// coppied from http://whoopsidaisies.hatenablog.com/entry/2013/12/20/232625
#include <opencv2/viz.hpp>
#include <opencv2/viz/widget_accessor.hpp>

#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkOBJReader.h>

using namespace cv;
using namespace std;

// Objファイルから3Dデータを読み込み可能なウィジェット
class WObj : public viz::Widget3D
{
public:
    WObj(const string& filename)
    {
        // OBJファイルを読み込むクラスの生成
        vtkSmartPointer<vtkOBJReader> reader = vtkSmartPointer<vtkOBJReader>::New();
        reader->SetFileName(filename.c_str());
        reader->Update();

        // mapperにOBJファイルからデータを取り込む
        vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
        mapper->SetInputConnection(reader->GetOutputPort());

        // actorの設定
        vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
        actor->SetMapper(mapper);

        // ウィジェットにactorをセットする
        viz::WidgetAccessor::setProp(*this, actor);
    } 
};

int main()
{
    // 表示用ウィンドウの生成
    viz::Viz3d objWindow("Creating Widgets");

    // Perfumeのウィジェットを生成
    string filename1 = "teapot.obj";
    WObj objTeapot(filename1);

    // Perfumeのウィジェットをウィンドウに表示
    objWindow.showWidget("Teapot", objTeapot);

    // 軸を表示
  Affine3d cloud_pose = Affine3f().translate(Vec3f(0,0,0));
  objWindow.showWidget("Coordinate Widget", viz::WCoordinateSystem(10), cloud_pose);

    // 表示のスタート
    objWindow.spin();
}

コンパイルと実行
shell-session
clang++ -std=c++11 `pkg-config --cflags opencv` -I/usr/local/include/vtk-8.1 main.cpp `pkg-config --libs opencv` /usr/local/lib/libvtk*
./a.out

スクリーンショット 2018-02-27 16.37.26.png

参考

https://stackoverflow.com/questions/45906638/there-is-no-options-in-hombrew-for-opencv-installation
https://docs.opencv.org/3.3.1/d2/d64/tutorial_creating_widgets.html
http://whoopsidaisies.hatenablog.com/entry/2013/12/20/232625
https://github.com/opencv/opencv/issues/9899

Why not register and get more from Qiita?
  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
Sign upLogin
2
Help us understand the problem. What are the problem?