LoginSignup
9
7

More than 5 years have passed since last update.

OpenCV 3.0 ビルド

Last updated at Posted at 2015-12-28

久しぶりにOpenCVをビルドをしたら「こんなに難しかったっけ・・・」と思ったので、今後のためにメモを残します。

いろいろなWebの記事をみるとNuGetとか公式サイトのを使えばいいよと書かれていたので、それでもいいのかもしれませんが。

ていうか3.1が出ててわろた

概要

  • 2015/12/21時点で最新のを使います。
  • Visual Studio 2015 Update 1を使ってビルドします。

ビルドの対象:

  • OpenCV 3.0.0 (gitから取得)
  • OpenCV contrib (gitから取得)
  • Qt 5.5.1 (OpenSource用、MSVC2013 64)

OpenCV 3.0.0からはnonfree(SIFTとかSURFとか)が付属しておらず、contribという別のソースコードを合わせないといけないそうです。

OpenSource用でないとQt 5.5.1 MSVCのバイナリがありませんでした。(Msysのバイナリでできるかどうかちょっとわかりません。)

あと、eigenというのを使ってみたいなと思ったのですが、コンパイラがこけてしまうのでやめました。

githubソースコードとQtバイナリの取得元はこちら:

CMAKE GUI設定

Generator:

Visual Studio 14 2015 Win64

ソースコードのパスとビルドのパス:

  • source code: C:/Users/***/Downloads/opencv-master/opencv-master
  • build binary: C:/Users/***/lib/vs14/64/opencv300

各種設定:

OPENCV:

OPENCV_EXTRA_MODULES_PATH:PATH=C:/Users/***/Downloads/opencv_contrib-master/opencv_contrib-master/modules

QT関連:

QT_QMAKE_EXECUTABLE:FILEPATH=C:/Qt/Qt5.5.1/5.5/msvc2013_64/bin/qmake.exe
Qt5Concurrent_DIR:PATH=C:/Qt/Qt5.5.1/5.5/msvc2013_64/lib/cmake/Qt5Concurrent
Qt5Gui_DIR:PATH=C:/Qt/Qt5.5.1/5.5/msvc2013_64/lib/cmake/Qt5Gui
Qt5OpenGL_DIR:PATH=C:/Qt/Qt5.5.1/5.5/msvc2013_64/lib/cmake/Qt5OpenGL
Qt5Widgets_DIR:PATH=C:/Qt/Qt5.5.1/5.5/msvc2013_64/lib/cmake/Qt5Widgets
Qt5Core_DIR:PATH=C:/Qt/Qt5.5.1/5.5/msvc2013_64/lib/cmake/Qt5Core
Qt5Test_DIR:PATH=C:/Qt/Qt5.5.1/5.5/msvc2013_64/lib/cmake/Qt5Test

ついでにPYTHON関係:

PYTHON3_EXECUTABLE:FILEPATH=C:/Users/***/AppData/Local/Programs/Python/Python35/python.exe
PYTHON3_INCLUDE_DIR2:PATH=
PYTHON3_INCLUDE_DIR:PATH=C:/Users/***/AppData/Local/Programs/Python/Python35/include
PYTHON3_LIBRARY:FILEPATH=C:/Users/***/AppData/Local/Programs/Python/Python35/libs/python35.lib
PYTHON3_LIBRARY_DEBUG:FILEPATH=PYTHON_DEBUG_LIBRARY-NOTFOUND
PYTHON3_NUMPY_INCLUDE_DIRS:PATH=C:/Users/***/AppData/Local/Programs/Python/Python35/lib/site-packages/numpy/core/include
PYTHON3_PACKAGES_PATH:PATH=C:/Users/***/AppData/Local/Programs/Python/Python35/Lib/site-packages

CMakeLists.txt修正:

Qt関連の修正をします。
変更内容は:

  • QStringでエラーが出たので、QT_COMPILING_QSTRING_COMPAT_CPPを定義しておきます。
  • CMP0020 をcmakeのポリシーとして指定するといいらしいので、書いておきます。

Qt関連の修正のほかに、既存のCMAKE_CXX_FLAGSに使用不能なオプション -Wextra が含まれているので、それを取り除きます。

#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -pedantic")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -pedantic")

以下の2行をとりあえずファイルの先頭に書きました。
2つのファイルとも同じ内容です。

C:\Users***\Downloads\opencv-master\opencv-master\modules\highgui\CMakeLists.txt に追記:

cmake_policy(SET CMP0020 NEW)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /DQT_COMPILING_QSTRING_COMPAT_CPP")

C:\Users***\Downloads\opencv_contrib-master\opencv_contrib-master\modules\cvv\CMakeLists.txt に追記:

cmake_policy(SET CMP0020 NEW)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /DQT_COMPILING_QSTRING_COMPAT_CPP")

プログラム修正

Visual Studio 2015では、C++11の統一初期化記法(Uniform Initialization)がつかえないみたいなので、それを全部直します。
(直す場所は、Visual StudioコンパイラがコンパイルエラーC2059やC2334として教えてくれます^_^)

before:

    MatchCallTab(const cvv::impl::MatchCall& matchCall, const QString& matchViewId)
        : MultiViewCallTab<cvv::view::MatchView, cvv::impl::MatchCall>{
              matchCall, matchViewId, QString{ "default_match_view" }, QString{ "LineMatchView" }
            }
    {
        oldView_ = view_;
        connect(&this->viewSet, SIGNAL(signal()), this, SLOT(viewChanged()));
    }

after:

    MatchCallTab(const cvv::impl::MatchCall& matchCall, const QString& matchViewId)
        : MultiViewCallTab<cvv::view::MatchView, cvv::impl::MatchCall>(
              matchCall, matchViewId, QString( "default_match_view" ), QString( "LineMatchView" )
            )
    {
        oldView_ = view_;
        connect(&this->viewSet, SIGNAL(signal()), this, SLOT(viewChanged()));
    }

stringutils.cppのウムラウト記号の場所でコンパイルエラー(C2001、C3688)になるので、コメントアウトします。

    static std::map<QString, QString> replacements3 = { { "EV", "AF" },
                                                    //{ "Ü", "A" },
                                                    //{ "Ö", "A" },
                                                    //{ "Ä", "A" },
                                                    { "O", "G" },
                                                    { "Z", "S" },
                                                    { "M", "N" },
                                                    { "KN", "N" },
                                                    { "K", "C" },
                                                    { "SCH", "SSS" },
                                                    { "PH", "FF" } };

参考文献:

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7