OpenCVをVisual Studioで動かす(NuGetによりインストールする方法)

動作可能な条件

Visual StudioのNuGetパッケージマネージャでOpenCVをインストールして動作させる.Visual Studioのバージョンごとに方法をまとめる.

バージョン 動作
Visual Studio Professional 2013
Visual Studio Express 2013 for Windows Desktop
Visual Studio Professional 2012
Visual Studio Express 2012 for Windows Desktop たぶん○
Visual Studio 2010 Professional
Visual C++ 2010 Express ×
× Visual C++ 2010 Express

そもそもNuGetパッケージマネージャが動かないため無理.(NuGetのコマンドライン版を使うという手もあるが,ここでは割愛)

△ Visual Studio 2010 Professional

現状では,OpenCVのNuGetパッケージが,プラットフォームツールセット「Visual Studio 2013 (v120)」と「Visual Studio 2012 (v110)」しか対応していない.が,ちょっと手を加えると一応動く.

また,Visual Studio 2010 Professionalの場合は,デフォルトでNuGetパッケージマネージャがインストールされていないので,インストールが必要.

○ Visual Studio Professional 2013, Visual Studio Express 2013 for Windows Desktop, Visual Studio Professional 2012, Visual Studio Express 2012 for Windows Desktop

Visual Studio Professional 2012は問題なし.Visual Studio Express 2012 for Windows Desktopは入手できなかったため確認できなかったが,2012はExpressでもNuGetが動くらしいのでおそらく問題ない.

手順

1.NuGetパッケージマネージャのインストール

Visual Studio 2010 Professionalでのみ必要な手順.最初の一回のみ.

2.NuGetパッケージマネージャの更新

すべてのバージョンで必要な手順.初回は必要.あとはたまにチェック.

3.OpenCVのインストール

すべてのバージョンで必要な手順.新しくプロジェクトを作る度必要.

4.OpenCVパッケージの設定ファイルの編集

Visual Studio Professional 2013, Visual Studio Express 2013 for Windows Desktop, Visual Studio 2010 Professionalで必要な手順.新しくプロジェクトを作る度必要.

5.動作確認

実際にOpenCVのコードが動くかどうか.

6.その他

場合によって.


1.NuGetパッケージマネージャのインストール

Visual Studio 2010 Professionalでのみ必要な手順.最初の一回のみ.

Visual Studioの「ツール」メニューから「拡張機能マネージャ」を開く.オンラインギャラリーから「NuGet Package Manager」をダウンロードしインストールする.
f:id:whoopsidaisies:20131203170231p:plain

2.NuGetパッケージマネージャの更新

すべてのバージョンで必要な手順.初回は必要.あとはたまにチェック.

NuGetのバージョンが古いとOpenCVパッケージがうまく動かない場合があるので更新する.Visual Studioの「ツール」メニューから「拡張機能マネージャ」を開き,更新プログラムをチェックする.「NuGet Package Manager」があれば更新する.

3.OpenCVのインストール

すべてのバージョンで必要な手順.新しくプロジェクトを作る度必要.

プロジェクトを右クリックして「NuGetパッケージの管理」を選択する.オンラインから「OpenCV」を検索しOpenCVをインストールする.

f:id:whoopsidaisies:20131203002213p:plain

4.OpenCVパッケージの設定ファイルの編集

Visual Studio Professional 2013, Visual Studio Express 2013 for Windows Desktop, Visual Studio 2010 Professionalで必要な手順.新しくプロジェクトを作る度必要.

ソリューションのフォルダの下に「packages」というフォルダが出来ている.「packages\OpenCV.2.4.7\build\native\OpenCV.targets」というファイルを編集する.「'v110'」という文字列を,Visual Studio 2013なら「'v120'」に,Visual Studio 2010なら「'v100'」に置換する.

f:id:whoopsidaisies:20131203173525p:plain

5.動作確認

OpenCVがちゃんと動くか確認する.別に何で確認してもいいんだけど,一応以前の記事に確認用に載せたSIFTのプログラムを載せておく.

#include <opencv2/nonfree/nonfree.hpp>
#include <opencv/highgui.h>

void main()
{
	// 画像読み込み
	const cv::Mat input = cv::imread("C:\\Users\\Public\\Pictures\\Sample Pictures\\Penguins2.jpg", 1);

	// SIFTによる特徴検出
	cv::SiftFeatureDetector detector;
	std::vector<cv::KeyPoint> keypoints;
	detector.detect(input, keypoints);

	// キーポイントの書き込み
	cv::Mat output;
	cv::drawKeypoints(input, keypoints, output);

	// キーポイントを書き込んだ画像の表示
	cv::imshow("SIFT", output);

	cv::waitKey();
}

こんな感じで画像にマーカが表示されれば成功.

f:id:whoopsidaisies:20131025145635p:plain


6.その他

エラーが出るようなら場合は下記設定を.

error C4996がでる

_CRT_SECURE_NO_DEPRECATEマクロを定義する.プロジェクトのプロパティの「C/C++」-「プリプロセッサ」-「プリプロセッサの定義」に_CRT_SECURE_NO_DEPRECATEと追加するか,ソースコードの先頭に以下を追加.

#define _CRT_SECURE_NO_DEPRECATE
「COFF への変換中に障害が発生しました...」とエラーが出る

プロジェクトのプロパティの「マニフェストツール」-「入出力」-「埋め込みマニフェスト」の設定を「いいえ」にする.