画像をベクトル化したり、オブジェクト検出したりしたかったのでOpenCV使ってみた。

OpenCVのインストール

ここからダウンロードした。

OpenCV | Free Science & Engineering software downloads at SourceForge.net
http://sourceforge.net/projects/opencvlibrary/

最新版は OpenCV-2.4.5.exe でした。

自己解凍書庫になってるので適当に解凍。
自分の場合は “C:\usr\opencv\” へ。

Welcome to opencv documentation! — OpenCV 2.4.5.0 documentation
http://docs.opencv.org/

ここに document があるので、

OpenCV 2.4.5.0 documentation ≫ OpenCV Tutorials ≫ Introduction to OpenCV ≫Installation in Windows

と参照して行って指示に従って setx -m コマンドで環境変数を設定する。

setx -m OPENCV_DIR C:\usr\opencv\build\x86\vc10

VisualStudio2010でプロジェクト作成

Visual C++ の Win32 コンソールアプリケーションを新規作成。

アプリケーションの種類: コンソールアプリケーション
追加のオプション: すべて選択解除
共通ヘッダーファイルを追加: すべて選択解除

プロジェクトのプロパティ編集

構成プロパティ ≫VC++ディレクトリ ≫ライブラリディレクトリ に以下を追加。

C:\usr\opencv\build\x86\vc10\staticlib

構成プロパティ ≫C/C++ ≫全般 ≫追加のインクルードディレクトリ に以下を追加。

 C:\usr\opencv\build\include

構成プロパティ ≫リンカー ≫入力 ≫追加の依存ファイル に以下を追加。

基本的に‘ C:\usr\opencv\build\x86\vc10\staticlib>dir /B *d.lib ‘したもの。
comctl32.libだけは後から足りなかったので追加した。

 <アクティブ(debug)>

IlmImfd.lib
libjasperd.lib
libjpegd.lib
libpngd.lib
libtiffd.lib
opencv_calib3d245d.lib
opencv_contrib245d.lib
opencv_core245d.lib
opencv_features2d245d.lib
opencv_flann245d.lib
opencv_gpu245d.lib
opencv_haartraining_engined.lib
opencv_highgui245d.lib
opencv_imgproc245d.lib
opencv_legacy245d.lib
opencv_ml245d.lib
opencv_nonfree245d.lib
opencv_objdetect245d.lib
opencv_photo245d.lib
opencv_stitching245d.lib
opencv_superres245d.lib
opencv_ts245d.lib
opencv_video245d.lib
opencv_videostab245d.lib
zlibd.lib
comctl32.lib

 <アクティブ(Release)>

IlmImf.lib
libjasper.lib
libjpeg.lib
libpng.lib
libtiff.lib
opencv_calib3d245.lib
opencv_contrib245.lib
opencv_core245.lib
opencv_features2d245.lib
opencv_flann245.lib
opencv_gpu245.lib
opencv_haartraining_engine.lib
opencv_highgui245.lib
opencv_imgproc245.lib
opencv_legacy245.lib
opencv_ml245.lib
opencv_nonfree245.lib
opencv_objdetect245.lib
opencv_photo245.lib
opencv_stitching245.lib
opencv_superres245.lib
opencv_ts245.lib
opencv_video245.lib
opencv_videostab245.lib
zlib.lib
comctl32.lib

構成プロパティ ≫リンカー ≫入力 ≫特定の既定のライブラリの無視 に以下を追加。

Visual C++ で CRT ライブラリおよび MFC ライブラリのリンク順序が正しくないときに LNK2005 エラーが発生する
http://support.microsoft.com/kb/148652/ja

Nafxcwd.lib
Libcmtd.lib
msvcprtd.lib

これでとりあえずいろいろサンプルを書いて動かせる状態になった。

 Hello OpenCV !

ここ見てサンプルを動かしてみた。

第2回 OpenCVを使ってみよう:OpenCVで学ぶ画像認識|gihyo.jp … 技術評論社
http://gihyo.jp/dev/feature/01/opencv/0002

Hello_OpenCV.cpp

#include "opencv/cv.h"
#include "opencv/highgui.h"

#define WM_NAME "cv_gui"

int main(int argc, char* argv[])
{
    // 画像ファイルポインタ
    IplImage* img;
    IplImage* img2;
    IplImage* img3;
    IplImage* img4;
    // 回転行列
    CvMat* rotationMat;
    // 画像ファイル
    char* filepath = "C:\\Users\\User\\Pictures\\miku.png";

    // 画像の読み込み cvLoadImage( ファイルパス, カラー画像であるか )
    img = cvLoadImage(filepath, CV_LOAD_IMAGE_COLOR);
    img2 = cvLoadImage(filepath, CV_LOAD_IMAGE_GRAYSCALE);
    // 画像のメモリ割当(img2と同じpixel,8bitのUnsigned,1ch(grayscale))
    img3 = cvCreateImage(cvGetSize(img2),IPL_DEPTH_8U,1);
    img4 = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);

    // 画像の表示
    cvNamedWindow (WM_NAME, CV_WINDOW_AUTOSIZE);
    cvShowImage (WM_NAME, img);
    cvWaitKey (0); // 何かキーが押されるまで待つ
    cvDestroyWindow(WM_NAME);

    // エッジ抽出
    cvCanny(img2,img3,64,128);

    // 画像の表示
    cvNamedWindow (WM_NAME, CV_WINDOW_AUTOSIZE);
    cvShowImage (WM_NAME, img3);
    cvWaitKey (0); // 何かキーが押されるまで待つ
    cvDestroyWindow(WM_NAME);

    // 回転行列領域の確保
    rotationMat = cvCreateMat(2,3,CV_32FC1); // 2×3の行列(32bit float)

    // 30度の回転行列を求める
    // cv2DRotationMatrix(回転中心座標,角度deg,拡大縮小比,rotationMat);
    cv2DRotationMatrix(cvPoint2D32f(img->height/2,img->width/2),30,1,rotationMat);

    // 回転
    cvWarpAffine(img,img4,rotationMat);

    // 画像の表示
    cvNamedWindow (WM_NAME, CV_WINDOW_AUTOSIZE);
    cvShowImage (WM_NAME, img4);
    cvWaitKey (0); // 何かキーが押されるまで待つ
    cvDestroyWindow(WM_NAME);

    // 画像の解放
    cvReleaseImage(&img);
    cvReleaseImage(&img2);
    cvReleaseImage(&img3);
    cvReleaseImage(&img4);

    return(0);
}
実行例(スクリーンショット)

実行例(スクリーンショット)

カテゴリー: PROG

0件のコメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください