OpenCVをVisual C++で簡単に使う

Visual Studio 2012以外の人は,バージョンごとに手順をまとめた以下の記事を参照.
OpenCVをVisual Studioで動かす(NuGetによりインストールする方法) - whoopsidaisies's diary

何のための記事なの

Visual C++でOpenCVを簡単に使う方法.OpenCVにつきものの面倒くさいインストールやら設定やらをしたくない人向け.Visual Studio 2012が必要.細かいことはいいから早く使いたいという方はこちらから

Visual C++でのOpenCVの使用方法は「OpenCV を Visual Studio で使う方法」等いろんなところで詳しく解説されているが,手順が多くとにかく面倒.せっかく動作しても,作業PCを変えたらまたインストールしなくちゃいけないし,新しいプロジェクト作ったら設定しなおさなくちゃいけない.

NuGetのOpenCVパッケージを使えば,こういう面倒な設定をほとんどやらなくてすみますよ,という記事.

なぜVisual C++か

以前「C#でOpenCVを動かす~NuGetでOpenCV.Netをインストール」という記事で,OpenCVのC#ラッパを簡単に使う方法を書いたが,今回はなぜC++にしたのか.もともとはC言語なインターフェースのOpenCVを使うのが面倒だったからC#にしていたのだが

  • C#ラッパはすべての関数を実装しているわけではないので,色々やろうと思うとやはりOpenCVそのものを使いたくなる.
  • OpenCV 2.0以降C++のクラスによるインターフェースが提供されているので,それなりに使いやすい.

といったところがC++にした理由.

Visual Studioなのは,NuGetにOpenCVパッケージがあったため.NuGetはVisual Studioについているパッケージ管理システム.様々なライブラリをVisual Studioの操作だけで使えるようにできる.非常に便利.

使い方は「NuGet でプロジェクト ライブラリを管理する」とかを参考に.

手順

NuGetパッケージの管理から「OpenCV」をインストール

ソリューションエクスプローラーからプロジェクトを右クリックして「NuGet パッケージの管理...」を選択.オンラインのパッケージから「OpenCV」を検索してインストール.そうすると,ソリューションフォルダの下に「packages」というフォルダができていて,その中にOpenCVのライブラリやりヘッダやらVisual Studioの設定用ファイルやらができて自動で読み込んでくれる.
f:id:whoopsidaisies:20131025142505p:plain

動作確認

以上で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();
}

プロジェクトの設定によっては「error C4996」が出てコンパイルが通らない場合がある.そうなった場合は

#define _CRT_SECURE_NO_DEPRECATE

するなり,プロジェクトの設定いじるなりして「_CRT_SECURE_NO_DEPRECATE」マクロを定義すれば通るはず.参考ページ

うまくいけば,下の画像みたいにキーポイントが書き込まれた画像が表示されるはず.
f:id:whoopsidaisies:20131025145635p:plain

注意

NuGetのOpenCVパッケージは現状では,プラットフォームツールセットがVisual Studio 2012 (v110)にしか対応していないっぽい.そのためこの記事を書いている時点では,上記方法はVisual Studio 2012でしか使えない.(もしかしたらVisual Studio 2010でも使えるかもしれないけど,ひと手間必要そう)

追記:Visual Studio 2012以外の人は以下の記事を参照
OpenCVをVisual Studioで動かす(NuGetによりインストールする方法) - whoopsidaisies's diary