のびっこ日記

(*|         |*)v ういっすー。 VRとかコンピュータービジョンとかARとかに興味があります。OpenCVとかPCLとかOculusRiftとかUnityとかKinectとかLeapMotionとか手を出していますが、いろいろドツボにハマっててくじけそう。誰か教えてー

激安3D ウェブカメラ(DS-3DW300)をVC++のOpenCV上で使う

f:id:nobikko_nobinobi:20140524010854j:plain需要があったみたいなのでこっちも書くー。

 

OpenCVライブラリのインストール

http://opencv.org/

ここでOpenCV for Windowsをクリック(現在の最新は2.4.9です)

するとexeがダウンロードされるので、実行して解凍先を指定します。

解凍すると、opencvフォルダができるので、それをリネームして適当なフォルダにおいておきます。(例として:C:\opencv249に置いてみます)

この中でVC++でのOpenCVビルドに必要なのは

  • build\includeフォルダ
  • build\x86\[使ってるVC++のバージョン(2010ならvc10, 2012ならvc11, 2013ならvc12)]

この2つです。

 

VC++のプロジェクトでOpenCVを使う設定

OpenCVのIncludeディレクトリを設定します。VC++で適当にプロジェクトを作成して、プロジェクトを右クリック>プロパティを選択。

左上の構成:をすべての構成に変更。

構成プロパティ>C/C++>全般を選択。

一番上の追加のインクルードディレクトリにOpenCV解凍先のIncludeディレクトリを指定。

例:C:\opencv249\build\include

最後にOKボタンを押してIncludeフォルダの設定完了です。

 

f:id:nobikko_nobinobi:20140524010854j:plain

ライブラリの指定

あとは、コンパイルするソースコードの頭に以下のコードを追加して、OpenCVのライブラリを指定します。

 以下はVC2013の例です。 vc12の部分は使ってるVCのバージョンに合わせて下さい。

-------------ここから--------------------

#ifdef _DEBUG

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_core249d.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_calib3d249d.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_imgproc249d.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_highgui249d.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_objdetect249d.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_contrib249d.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_features2d249d.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_flann249d.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_gpu249d.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_legacy249d.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_ts249d.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_video249d.lib")

#else

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_core249.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_calib3d249.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_imgproc249.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_highgui249.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_objdetect249.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_contrib249.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_features2d249.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_flann249.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_gpu249.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_legacy249.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_ts249.lib")

    #pragma comment(lib,"C:\\opencv249\\build\\x86\\vc12\\lib\\opencv_video249.lib")

#endif

 -------------ここまで--------------------

 

VC++OpenCVで 3Dモードで使うには

 

以下のように、VideoCaptureでオープンした後で、付属アプリを起動させると使えます。

 

#include <opencv2/opencv.hpp>

using namespace cv;

 

<<<<この辺りに上記のpragmaの塊を記述>>>>

 

int _tmain(int argc, _TCHAR* argv[])

{

VideoCapture cap(0); // デフォルトカメラをオープン

system("IF EXIST \"C:\\Program Files (x86)\\CHUSEI 3D Webcam\\CHUSEI 3D Webcam.exe\" START \"\" \"C:\\Program Files (x86)\\CHUSEI 3D Webcam\\CHUSEI 3D Webcam.exe\""); // for 64bit OS

system("IF EXIST \"C:\\Program Files\\CHUSEI 3D Webcam\\CHUSEI 3D Webcam.exe\" START \"\" \"C:\\Program Files\\CHUSEI 3D Webcam\\CHUSEI 3D Webcam.exe\""); // for 32bit OS

namedWindow("preview", 1);

for (;;){

Mat frame;

cap >> frame; // カメラから新しいフレームを取得

imshow("preview", frame);

if (waitKey(1) >= 0) break;

}

return 0;

 

コンパイルするとReleaseフォルダとかDebugフォルダとかが作成されるので、

そこにOpenCVx86\vc12\binから必要なDLLを追加します。

面倒だったらx86\vc12\binフォルダの中身まるごとコピーしてもなんとかなります。

 

こんな感じで3Dデータにアクセスできるので、是非いろいろやってみてください。。

面白そうな使い方見つけたら是非教えてねー(*・        ・*v