OpenCVのサンプルプログラムはHPを検索すればいくらでも転がっていますが、最初の頃はこれを、どのように使えば良いのか?私にはよく分かりませんでした。
という事で、OpenCV2.2およびVisual Studio2010 Express を使って、サンプルプログラムを作成する方法を紹介します。
何はともあれ、サンプルプログラムはこちらです。
新規プロジェクトの作成方法
Visual Studio を起動し、新しいプロジェクトをクリックします。
開いたウィンドウのWin32コンソールアプリケーションを選択し、任意の名前および場所を指定します。
OKボタンをクリックし、次へをクリックします。
さらに表示されたウィンドウの完了をクリックします。
すると、空の状態のソースコードが作成されます。
OpenCV.jpのサンプルとは、mainの部分がちょっと異なりますが、気にせず、そのままにしておいて下さい。
次にOpenCV2.2の入手、ダウンロード、インストール、環境設定の最後の部分でも紹介していますが、ヘッダファイルをプログラムから参照できるように、OpenCVのヘッダファイルのディレクトリを指定します。
プロジェクトのプロパティで構成プロパティ→C/C++→全般の追加のインクルードディレクトリに
C:\OpenCV2.2\include
を指定します。
あとは、作成したcppファイル(上記の例ではOpenCV2.2Sample.cpp)にプログラムをしていけばOKです。
以下、画像を開き、ガウシアンフィルタ処理を行い、処理前、処理後の画像を表示するだけの簡単なサンプルプログラムを示します。
// OpenCV2.2Sample.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
//プロジェクトのプロパティ⇒C/C++⇒全般 の追加のインクルードディレクトリに
// 『C:\OpenCV2.2\include』を追加のこと
#include "opencv2\\opencv.hpp"
#ifdef _DEBUG
//Debugモードの場合
#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_core220d.lib")
#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_imgproc220d.lib")
#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_highgui220d.lib")
#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_objdetect220d.lib")
//以下、必要に応じて追加
//#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_ml220d.lib")
//#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_features2d220d.lib")
//#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_video220d.lib")
//#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_calib3d220d.lib")
//#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_flann220d.lib")
//#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_contrib220d.lib")
//#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_legacy220d.lib")
//#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_gpu220d.lib")
#else
//Releaseモードの場合
#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_core220.lib")
#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_imgproc220.lib")
#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_highgui220.lib")
#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_objdetect220.lib")
//以下、必要に応じて追加
//#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_ml220.lib")
//#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_features2d220.lib")
//#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_video220.lib")
//#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_calib3d220.lib")
//#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_flann220.lib")
//#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_contrib220.lib")
//#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_legacy220.lib")
//#pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_gpu220.lib")
#endif
int _tmain(int argc, _TCHAR* argv[])
{
//画像データの読込
IplImage* src_img = cvLoadImage("C:\\OpenCV2.2\\samples\\c\\lena.jpg", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
if (src_img == NULL){
return 0;
}
//表示ウィンドウの作成
cvNamedWindow("src");
cvNamedWindow("dst");
//処理後画像データの確保
IplImage* dst_img = cvCreateImage(cvGetSize(src_img), src_img->depth, src_img->nChannels);
//画像処理例(ガウシアンフィルタ)
cvSmooth(src_img, dst_img, CV_GAUSSIAN, 9);
//画像の表示
cvShowImage ("src", src_img);
cvShowImage ("dst", dst_img);
//キー入力待ち
cvWaitKey (0);
//全てのウィンドウの削除
cvDestroyAllWindows();
//画像データの解放
cvReleaseImage(&src_img);
cvReleaseImage(&dst_img);
return 0;
}
お久しぶりです。
以前「OpenCV2.3の入手、ダウンロード・・・」の記事に書き込みをさせて頂いた者です。
プログラムに関して質問があります。
OpenCVでヘッダファイルをインクルードする際に、フルパス指定が使われていますがこれはなぜなのでしょうか?
あまりに単純な質問で申し訳ないのですが、ご返信お待ちしています。
インクルードファイルはフルパスでは無く、opencv2からですよね。
この内容については、別途、質問を頂いているので、こちら↓を参照ください。
http://imagingsolution.net/program/opencv/opencv2-3/opencv2-3-downlaod-install/#comment-485
その他の部分でフルパスを指定しているのは、VisualStudioのプロジェクトのプロパティの参照ディレクトリでディレクトリを指定する方法もありますが、その方法だと、パッと見でディレクトリが分かりづらくなるため、初めてプログラムをやる方にとっては、ハマり易いかと思い、フルパスを指定するようにしています。
この辺のやり方は好みが分かれる部分ですので、ある程度理解されている方は自分のやり易い方法で設定すれば良いかと思います。
ピンバック: 【OpenCV2.3】サンプルプログラム(C言語版) | イメージングソリューション
ピンバック: 【OpenCV】ガンマ補正 | イメージングソリューション
ピンバック: 【OpenCV2.2】サンプルプログラム(C++/CLI版) | イメージングソリューション