LoginSignup
15
12

More than 5 years have passed since last update.

OpenCVのNuGetパッケージまとめ(2017年版)

Last updated at Posted at 2017-12-09

はじめに

  • この記事はOpenCV Advent Calendar 2017の10日目の記事です.
  • 他の記事は目次にまとめられています.
  • この記事は現在公開されているOpenCVのNuGetパッケージの調査結果になります.どのNuGetパッケージを使うかを選択する際に参考になりましたら幸いです.
    • Windows環境じゃない人ごめんなさい
    • ソースからビルド派,インストーラ派の人ごめんなさい

NuGetとは

NuGetとは,.NET Framework対応のパッケージ管理システムです.また,Visual Studio 2012以降から標準でNuGetがインストールされているため,ユーザーはNuGetそのものを追加でインストールすることなくNuGetを利用できます.

NuGetパッケージ一覧

NuGetのパッケージ検索でOpenCVパッケージを探したところ,執筆時点(2017/12/9)では以下のOpenCVパッケージが公開されているようです.NuGetパッケージのインストール方法についてはOpenCVの環境構築(OpenCV 3.0/3.1)を参照ください.

ID NuGetパッケージ名
[1] opencv3
[2] opencv3.1
[3] opencv.win.native
[4] opencv.win.native.static
[5] opencvdefault
[6] opencvcontrib
[7] OpenCV31-vc12-x64
[8] opencvcuda-release

検証環境

本記事の検証は以下の環境で実施しました.

項目 内容
CPU Intel Core i7-6700HQ 2.60GHz
メモリ 64GB
GPU NVIDIA GeForce GTX 1060 / 6GB
OS Windows 10 Pro 64bit
Visual Studioバージョン Visual Studio 2013, Visual Studio 2015
CUDA CUDA 9.0

各NuGetパッケージの紹介

ここでは前述のNuGetパッケージに関する特徴をまとめます.

[1] opencv3

項目 内容
URL https://www.nuget.org/packages/opencv3/
OpenCVバージョン 3.0.0
Visual Studioバージョン VS2013
プラットフォーム x86, x64
opencv_contribの有無
ビルド可否

cv::getBuildInformation()の出力結果はこちらを参照下さい.

[2] opencv3.1

項目 内容
URL https://www.nuget.org/packages/opencv3.1/
OpenCVバージョン 3.1.0
Visual Studioバージョン VS2013, VS2015
プラットフォーム x86, x64
opencv_contribの有無
ビルド可否

cv::getBuildInformation()の出力結果はこちらを参照下さい.

[3] opencv.win.native

項目 内容
URL https://www.nuget.org/packages/opencv.win.native/
OpenCVバージョン 3.1.0
Visual Studioバージョン VS2015
プラットフォーム x86, x64
opencv_contribの有無
ビルド可否

cv::getBuildInformation()の出力結果はこちらを参照下さい.
また,今回は未検証ですが,OpenCV 3.2でVS2015/VS2017に対応したバージョンもあるようです.
https://www.nuget.org/packages/opencv.win.native/320.1.1-vs141

[4] opencv.win.native.static

項目 内容
URL https://www.nuget.org/packages/opencv.win.native.static/
OpenCVバージョン 3.1.0
Visual Studioバージョン VS2015
プラットフォーム x86, x64
opencv_contribの有無
ビルド可否

cv::getBuildInformation()の出力結果はこちらを参照下さい.

注意点

OpenCVや3rdpardyライブラリはstatic libraryのため、プロジェクト設定にて、ランタイムライブラリを/MD(デバッグビルドの場合は/MDd)に指定するとビルドエラーが起きるのでご注意ください.以下にリリースビルド時のエラーメッセージを抜粋します.


1>opencv_imgproc310.lib(imgwarp.obj) : error LNK2038: 'RuntimeLibrary' の不一致が検出されました。値 'MT_StaticRelease' が MD_DynamicRelease の値 'main.obj' と一致しません。
1>opencv_imgproc310.lib(opencv_imgproc_pch.obj) : error LNK2038: 'RuntimeLibrary' の不一致が検出されました。値 'MT_StaticRelease' が MD_DynamicRelease の値 'main.obj' と一致しません。

このNuGetパッケージを使用する場合,ランタイムライブラリを/MT(デバッグビルドの場合は/MTd)にする必要があります.

[5] opencvdefault

項目 内容
URL https://www.nuget.org/packages/opencvdefault/
OpenCVバージョン 3.1.0
Visual Studioバージョン VS2013, VS2015
プラットフォーム x86, x64
opencv_contribの有無
ビルド可否 〇(x64のみ)

cv::getBuildInformation()の出力結果はこちらを参照下さい.

注意点

VS2013, VS2015ともにパッケージ内にx86向けのライブラリが配置されているものの,x86向けでビルドした際にリンクエラーが起きます・・・.


1>main.obj : error LNK2001: 外部シンボル ""void __cdecl cv::imshow(class cv::String const &,class cv::_InputArray const &)" (?imshow@cv@@YAXABVString@1@ABV_InputArray@1@@Z)" は未解決です。
1>main.obj : error LNK2001: 外部シンボル ""public: void __thiscall cv::Mat::deallocate(void)" (?deallocate@Mat@cv@@QAEXXZ)" は未解決です。
1>main.obj : error LNK2001: 外部シンボル ""public: void __thiscall cv::Mat::create(int,int const *,int)" (?create@Mat@cv@@QAEXHPBHH@Z)" は未解決です。

[6] opencvcontrib

項目 内容
URL https://www.nuget.org/packages/opencvcontrib/
OpenCVバージョン 3.1.0
Visual Studioバージョン VS2015
プラットフォーム x86, x64
opencv_contribの有無
ビルド可否 〇(x64のみ)

cv::getBuildInformation()の出力結果はこちらを参照下さい.
このパッケージの大きな特徴(だと個人的に感じているの)はOpenGL supportとVTK supportが有効になっている点です.

  GUI: 
    QT:                          NO
    Win32 UI:                    YES
    OpenGL support:              YES (glu32 opengl32)
    VTK support:                 YES (ver 7.0.0)

注意点

パッケージ内にx86向けのライブラリが配置されているものの,x86向けでビルドした際にリンクエラーが起きます・・・.


1>main.obj : error LNK2001: 外部シンボル ""void __cdecl cv::imshow(class cv::String const &,class cv::_InputArray const &)" (?imshow@cv@@YAXABVString@1@ABV_InputArray@1@@Z)" は未解決です。
1>main.obj : error LNK2001: 外部シンボル ""public: void __thiscall cv::Mat::deallocate(void)" (?deallocate@Mat@cv@@QAEXXZ)" は未解決です。
1>main.obj : error LNK2001: 外部シンボル ""public: void __thiscall cv::Mat::create(int,int const *,int)" (?create@Mat@cv@@QAEXHPBHH@Z)" は未解決です。

[7] OpenCV31-vc12-x64

項目 内容
URL https://www.nuget.org/packages/OpenCV31-vc12-x64/
OpenCVバージョン 3.1.0
Visual Studioバージョン VS2013
プラットフォーム x64
opencv_contribの有無
ビルド可否 ×

私の環境ではビルドできませんでした・・・.NuGetパッケージをインストールすると通常インクルードパス、ライブラリパスなどは自動的に設定されるのですが,このパッケージではその設定がうまくできていないようです.

[8] opencvcuda-release

項目 内容
URL https://www.nuget.org/packages/opencvcuda-release/
OpenCVバージョン 3.1.0
Visual Studioバージョン VS2013
プラットフォーム x64
opencv_contribの有無
ビルド可否 ?

cudaモジュールが使える唯一のNuGetパッケージです.
ただし,CUDA 7.5に依存しているようで私の環境では動作確認できませんでした・・・.

NuGetパッケージの使い分け

(NuGetパッケージという選択肢の中で)できるだけ新しいOpenCVを使いたい

VS2017で使いたい

opencv_contribも使いたい

  • [1] opencv3
  • [6] opencvcontrib

vizモジュールを使いたい

  • [6] opencvcontrib 一択

cudaモジュールを使いたい

  • 残念ながらNuGetパッケージを使わない方がよいでしょう

おわりに

  • 明日はfukushima1981せんせーの記事で,タイトルは「世代別マイクロアーキテクチャごとのOpenCVベンチマーク大会」となっています.すごく楽しみで眠れなさそうです!!!

余談(その1)

OpenCV公式がNuGetパッケージ作ってくれるといいのに・・・と思っている人はやっぱりいるようでPlease produce current C++ NuGet package for OpenCV #9320というissueが既に作られています.このissueにある公式メンバのコメントは以下の通りです.

issue9320.png

コメントに出てくるVcpkgについてはUnaNancyOwenさんのVcpkgを使用してOpenCVを導入するという記事が参考になります.また,記事執筆時点ではNuGetの方が初心者に優しい気がしている(ボタンをポチポチするだけでインストールできる)ので,公式がNuGet版パッケージを出してくれるといいなーと個人的には思ったりしています.

余談(その2)

当初上記ツイートに書いたネタで記事を書く予定だった・・・のですが,自宅のJetson TX2が起動しなくなりまして,急遽ネタ変更になりました.このお蔵入りになったネタはこの本の続編(?)などで公開出来たらいいなーと思っています.

15
12
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
15
12