[[SiioLaboratory]]

*OpenCV 2.2 を Mac OS X 10.6.5 Snow Leopard にインストールする [#bf4a48c7]

**インストール先環境の説明 [#he82b8a7]

本日(2010年12月19日)時点での最新版の環境.
インストールしたマシンはMac Bok Air 11.6インチ.xcodeは3.2.5

http://is.ocha.ac.jp/~siio/gyazo/219394bc2a3cb2387fc62b5d5e5060e2.png
http://gyazo.com/2c19e1dc7f9761555edd694ad47ce3d1.png

ccのバージョンは,以下.

 $ cc -v
 Using built-in specs.
 Target: i686-apple-darwin10
 Configured with: /var/tmp/gcc/gcc-5664~89/src/configure --disable-checking --enable-werror 
 --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ 
 --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib 
 --build=i686-apple-darwin10 --program-prefix=i686-apple-darwin10- 
 --host=x86_64-apple-darwin10 --target=i686-apple-darwin10 --with-gxx-include-dir=/include/c++/4.2.1
 Thread model: posix
 gcc version 4.2.1 (Apple Inc. build 5664)


**macportsでインストール [#p69b34bb]

cmakeでインストールする方法と,macports使う方法の2種類があるらしい.
ここでは

-http://d.hatena.ne.jp/rabbit2go/20101213/1292231177

を参考にして,
macport使ってみた. macportsは,こちら.

-http://www.macports.org/

念のために,macportsとそのデータベースを最新版にしておく.

 $ sudo port selfupdate 


インストールは,コマンド一発.結構時間がかかるけどエラー無しで成功.

 $ sudo port install opencv

**サンプルファイルを動かしてみる [#le96f14d]

サンプルは,

 /opt/local/share/opencv/samples/

以下に入っている.試しに,

 /opt/local/share/opencv/samples/c/build_all.sh
 /opt/local/share/opencv/samples/c/facetest.cpp

をどこかにコピーする.コンパイルは,

 $ ./build_all.sh

で行える.そして,

 /opt/local/share/opencv/samples/c/facedetect.cmd

のメモ書きに従って,

 $ ./facedetect --cascade="/opt/local/share/opencv/haarcascades/haarcascade_frontalface_default.xml" 

と実行すると,Mac Book Airのカメラが動作して,顔検出をしてくれる.

http://is.ocha.ac.jp/~siio/gyazo/b7bb1a2fd7fcea4885e356345f5be0cc.png

*OpenCV 2.2 をXcodeでプログラムする [#u5f2b590]

**Xcodeを起動する [#k541c151]

起動して,新規プロジェクトを選択.

http://is.ocha.ac.jp/~siio/gyazo/3b9dca78f62e82d055745ce3d03d5115.png

Comand Line Tool を選ぶ.

http://is.ocha.ac.jp/~siio/gyazo/853b321f101a07c0cfbe49f2a0c293f0.png

とりあえず.main.cに簡単なプログラムを入力する.

-http://opencv.jp/sample/video_io.html

にある,カメラ画像をキャプチャする簡単なプログラムを入力してみる.

http://is.ocha.ac.jp/~siio/gyazo/e5050d95a226fa53fef9d6c8ce37df1b.png

これを「ビルドと実行」してコンパイルするとエラーだらけ.

http://is.ocha.ac.jp/~siio/gyazo/be3092752bd7c6242a9e85e52679e229.png

**ヘッダファイルとダイナミックライブラリを設定 [#md4f89e6]

メニューバーの「プロジェクト」,「アクティブターゲットxxxxxxを編集」を選ぶ.
このなかのダイアログから,「ビルド」タブを選ぶ.
このなかの,「ヘッダ探索パス」に/opt/local/include/**を加える.

http://is.ocha.ac.jp/~siio/gyazo/b66de55a1c5761d66800d62c762127c1.png


これで,「ビルドと実行」を行うと,コンパイルでのエラーはなくなる.
が,実行のときにライブラリが無くてエラーが出る.
そこで,ダイナミックライブラリを追加するために
グループを追加する.名前はとりあえずDynamicLibくらいにしておく.

http://gyazo.com/19655580b09201f9b66e34d2e86d7173.png


これに,/opt/local/lib/から,

 /opt/local/lib/libopencv_core.2.2.0.dylib
 /opt/local/lib/libopencv_highgui.2.2.0.dylib
 /opt/local/lib/libopencv_imgproc.2.2.0.dylib

を追加する.(もしかしたら将来他も追加する必要があるかも)


http://is.ocha.ac.jp/~siio/gyazo/002e20387e25b13eb77832789cf19c34.png

これで「ビルドと実行」を選ぶとコンパイルして実行できる.



*おまけ1:Open CV 2.2をWindows7にインストールする方法 [#ld846ba9]

-Open CV 2.2をインストール

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.2/OpenCV-2.2.0-win32-vs2010.exe/download

からダウンロード。実行してインストール。

-Visual Studio 2010をインストール

http://msdn51.e-academy.com/elms/Storefront/Home.aspx?campus=ocha_isc

からログインしてVisual Studio 2010を取得(本学科学生限定)。

-カメラを動かしてみる

--http://opencv.jp/sample/video_io.html

にある,カメラ画像をキャプチャする簡単なプログラムを入力してみる.


--プロジェクトのプロパティ⇒C/C++⇒全般 の追加のインクルードディレクトリに『C:\OpenCV2.2\include』を追加のこと

#includeや#pragma commentは以下のようにする

 #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



*おまけ2:Windows 7でHD解像度のUSB webcamを使う方法 [#s62aeb89]

**その1 [#ha0f988d]

http://twitter.com/yoggy さんから教えていただきました。ありがとうございました。
Video Input Libraryというのを使う方法です。

https://gist.github.com/787779
に書いてある方法です。

-https://gist.github.com/787779のページのソースコードを入手する。
-videoInput.libとvideoInput.hを探す
--上記のようにOpen CVをインストールしてあれば、c:\OpenCV2.2\3rdparty\libとc:\OpenCV2.2\3rdparty\includeにあります
--無い場合はhttp://www.muonics.net/school/spring05/videoInput/
からlibとhを取り寄せる。それをc:\OpenCV2.2\3rdparty\libと
c:\OpenCV2.2\3rdparty\includeに置く。(他でも良いけど)
-ソースコートの#pragma comment(lib, xxxx)の場所を実際のlibのある場所に修正する。
--たとえば #pragma comment(lib,"C:\\OpenCV2.2\\lib\\opencv_core220d.lib") とか
--たとえば #pragma comment(lib,"C:\\OpenCV2.2\\3rrdparty\\lib\\videoInput.lib") とか
-videoInput.hへのパスを登録しておく
--プロジェクトのプロパティ⇒C/C++⇒全般 の追加のインクルードディレクトリに例えば『C:\OpenCV2.2\3rdparty\include』を追加

**その2 [#i7734e5c]

http://twitter.com/dandelion1124 さんからも、
Opencvのソースを変更してVideo Input Libraryを使う方法を教えてもらいました。

+Windows SDKをインストールする
+Open CV2.2にhttp://bit.ly/dTolrvの修正を行う
+CMakeでWITH_VIDEOINPUTを有効にしてビルドする
+cv Create Camera Captureの引数をCV_CAP_DSHOWに指定する
+cv Set Capture Property関数でキャプチャサイズ(幅,高さ)やFPSが変更できる



*おまけ3:Open CV で使える安価なfull HD解像度USBカメラ [#wea5e333]

**Logicool (Logitech) C910 を使ってみる [#C910]

&ref(webcam-c910-glamour.png);

http://www.logitech.com/ja-jp/webcam-communications/webcams/devices/6816


このカメラは,Windowsにだけ対応している ((2011年1月に、Mac OS Xにも対応し、Windowsと同様に、動画静止画撮影ソフトと、テレビ電話ソフトが配布された。しかし、Windows版ソフトにある、アンチフリッカー周波数切替え、マニュアルフォーカス、マニュアル輝度、顔追跡などの設定機能がない。Windows版では、これらの設定がOpen CVなどでも使えた。なのでMac OS Xでは、Logicoolのソフトをインストールする意味は無い。)) .
しかし,Mac OS Xのマシンに接続すると,UVC (USB Video Class) 対応のデバイスとして機能するので,
Macのアプリケーションから使うことが可能である.
また,上記のOpen CVのプログラムからも使うことが可能である.

このカメラは,現在販売されている安価なUSB Webカメラの中で,
唯一,フルHD対応,つまり1920x1080画素の動画が撮影できる製品である.
上記のプログラムで,縦横の画素数を変えると,
取得できる動画のサイズを変更できる.
ただ,1920x1080画素を指定しても,アスペクト比が1:1にならず横長に潰れた
画像しか得られない.
検索したところ,以下の画素数で,アスペクト比1:1の画像が得られるようである.
1792 x 1008画素は,かなりHDに近いので使えるかも.

 1792 x 1008
 1296 x 729
 864 x 486

以下を参考:
-http://meteor.blog.avis.jp/archives/197
-http://tatchee.jugem.jp/?eid=120

ところが,このカメラ,
対応しているはずのWindowsで,Open CV 2.2を使って試したところ,
画像サイズの変更が効かない.
640x480画素以外の設定ができない.

Windows 7でHD解像度で使うためには、上の「Windows 7でHD解像度のUSB webcamを使う方法」のような方法が必要。


**Microsoft Lifecam Studioを使ってみる [#ef052ad0]

http://www.microsoft.com/japan/hardware/lifecam/images/wc_studio_img.jpg

http://www.microsoft.com/japan/hardware/lifecam/studio.mspx

2011年1月28日に発売されたばかりのFull HDのwebカメラである。
上記のC910と同様に、Mac OS Xに接続するとUVCカメラとして動作する。
さらに、C910より素晴らしいことに、Mac OS XのOpencvでfull HD解像度で動作する。
1920x1080も1280x720も正しく出る。
ちなみに、次の例は、1280x720画素を縮小したものである。

&ref(screenS.jpg);

オリジナル画像はこれ

http://is.ocha.ac.jp/~siio/index.php?plugin=attach&pcmd=open&file=screenL.png&refer=How2OpenCVMacOSX]]

下部には、従来のカメラで標準的なネジ穴も付いているので、
通常のカメラを固定する三脚などを活用出来る。
という素晴らしいwebカメラなのであるが、
Windows 7で試すと、OpencvではVGA解像度含めて使えない。

Windows 7でHD解像度で使うためには、上の「Windows 7でHD解像度のUSB webcamを使う方法」のような方法が必要。


**ELECOM UCAM-DLY300TA [#kf863ae7]

http://gyazo.com/cf17392e21887c62f54fb4023a820211.png

http://www2.elecom.co.jp/multimedia/pc-camera/ucam-dly300ta/index.asp

これも300万画素full HDのUSB webカメラ。

Mac OS Xから使うと、
Logicool (Logitech) C910の時のようにアスペクトレシオがおかしい。(横につぶれる)
C910のように、使える解像度が決まっているのかもしれない。

Windows 7でも、他のカメラと同様に、上の「Windows 7でHD解像度のUSB webcamを使う方法」で表示できるが、やはりアスペクトレシオがおかしい(横につぶれる)。これも使える解像度が決まっているのかもしれない。

**画質の比較 [#xc3cb11d]

左から、Logicool C910, Microsoft Lifecam Studio, ELECOM UCAM-DLY300TA

http://gyazo.com/ed3996b179b090fe010010609f15fbd3.png

これは上記の「Windows 7でHD解像度のUSB webcamを使う方法 その1」のプログラムを使ったもの。
full HDで指定したときの、画面左端の部分。

Logicoolはナチュラルな階調、MSはコントラスト高めな設定。
ELECOMはアスペクトレシオがおかしいので、
full HD解像度で動いていなくて、それで画質が悪いと思われる。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS