2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OpenCVをwindowsで使うメモ(CMake)

Last updated at Posted at 2023-07-18

OpenCVをwindowsで使用したので、その備忘録です。
エディタはvisual studio codeで、cmakeでbuildしています。
今回は、3rd party のライブラリは一か所にまとめたかったので、dependencyフォルダを別途作成し、そのなかにさらにopencvフォルダを作りました。
また、ChARUcoを使ってみたかったので、sourceからbuildしています。

プロジェクトのファイル構造
│   
├─dependencies
│  └─opencv
│      ├─bin
│      ├─etc
│      ├─include
│      ├─java
│      │  ├─x64
│      │  └─x86
│      ├─python
│      └─x64
│          ├─vc14
│          └─vc15
└─src
    ├─lib
    └─main.cpp

source codeのダウンロード

OpenCVのソースコードは下記にあります。

OpenCVのRelease欄にある、〇〇windows.exe(古いバージョンだと、opencv-x.y.z-vc14_vc15.exeとか)をダウンロードします。
実行すると、ファイルの生成が始まります。
終了すると、sourcesとbuildができるので、buildにはこちらの"source"を使用します。

(assetsからダウンロードできるsource code.zipを使ってもbuildできると思いますが、試していません。)

参考:

ChArUcoを使わない場合、buildフォルダがそのまま使えるので、再度buildをする必要はありません。
ですが、ChArUcoなどを認識したい場合、別途OpenCV_contribをダウンロードし、再度buildする必要があります。

これをダウンロードし、適当な場所で解凍します。
1点注意することがあり、OpenCVのバージョンと、contribのバージョンを一致させておきましょう。(OpenCV-4.5.4なら、opencv_contrib-4.5.4を使う。)
そして、cmake guiを起動し、下記の変数を編集します。
generatorはvisual studioを選択します。

-DOPENCV_EXTRA_MODULES_PATH = path\to\opencv_contrib-4.x\opencv_contrib-4.x\modules
-DWITH_CUDA=OFF # cudaがある方はON
-DBUILD_TESTS=OFF
-DINSTALL_TESTS=OFF
-DBUILD_opencv_dnn=OFF # 自分の環境ではdnn関連のbuildが通らなかったため、OFF

それ以外の変数は基本デフォルトでOKでした。

build

visual studioを起動し、DebugもしくはReleaseを選択し、buildします。
自分のプロジェクトをdebug buildをしたいなら、OpenCVのほうも、debug buildしたものが必要です。

buildできたら、"INSTALL"をbuildして、installディレクトリに必要なファイルをコピーします。
installディレクトリは、-DCMAKE_INSTALL_PREFIXで指定できます。

すると、デフォルトではbuildしたディレクトリ内のinstallディレクトリにインストールされるので、それをコピーしてほしい場所に設置すればよいです。
今は、dependencies/opencv内に、buildの中身をコピーしました。
OpenCVConfig.cmakeもその中にあります。
このパスをCMake側で設定し、find packageします。

CMakeLists.txt

OpenCV_INCLUDE_DIRSにOpenCVのincludeディレクトリのパスが、OpenCV_LIBRARIESにリンクするファイルのリストが入っています。dllファイルなどのランタイムライブラリは、cmake --installでbuildディレクトリにコピーされる設定にしています。正規表現でdllのみが選択されるようにしています。

CMakeLists.txt
cmake_minimum_required (VERSION 3.8)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED true)

project ("OpenCVTest" VERSION 0.0)

set (OpenCV_DIR "${PROJECT_SOURCE_DIR}/dependencies/opencv")
find_package(OpenCV CONFIG REQUIRED)

add_executable (${CMAKE_PROJECT_NAME} "${PROJECT_SOURCE_DIR}/src/main.cpp")
target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC ${OpenCV_INCLUDE_DIRS})
target_link_libraries(${CMAKE_PROJECT_NAME} ${OpenCV_LIBRARIES})

if (MSVC)
    install(DIRECTORY "${PROJECT_SOURCE_DIR}/dependencies/opencv/x64/vc15/bin/" DESTINATION ${CMAKE_BINARY_DIR}/Debug
        FILES_MATCHING PATTERN "*.dll")
else()
    # install(FILES ${RUN_TIME_LIBS} DESTINATION ${CMAKE_BINARY_DIR})
endif()

buildする

以下のコマンドをそれぞれ実行していきます。

mkdir build
cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -G "Visual Studio 17 2022"
cmake --build build --config Debug --parallel コア数
cmake --install build --config Debug

pre buildされたものを使う場合

今回はChARUcoを使うためにbuildしましたが、基本的な画像処理をしたいだけならすでにbuild済みのファイルを使うだけで充分です。
releaseのopencv-x.y.z-windows.exeを実行したのちにできるbuildフォルダに必要なファイルが入っています。

大抵のライブラリはlibとbinのファイルを適宜好きな場所にコピーしても問題なく使えますが、ことOpenCVにおいては、フォルダの階層関係が決まっているらしく、ダウンロードしたフォルダをそのままコピーしました。
OpenCVConfig.cmakeはopencvフォルダ直下と、x64/vc15/libにありましたが、どちらをCMakeに設定してもうまく動作しました。

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?