[[SiioLaboratory]] #author("2022-01-13T19:28:09+09:00","ocha","ocha") *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/~gradthesis/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/~gradthesis/gyazo/b7bb1a2fd7fcea4885e356345f5be0cc.png *OpenCV 2.2 をXcodeでプログラムする [#u5f2b590] **Xcodeを起動する [#k541c151] 起動して,新規プロジェクトを選択. http://is.ocha.ac.jp/~gradthesis/gyazo/3b9dca78f62e82d055745ce3d03d5115.png Comand Line Tool を選ぶ. http://is.ocha.ac.jp/~gradthesis/gyazo/853b321f101a07c0cfbe49f2a0c293f0.png とりあえず.main.cに簡単なプログラムを入力する. -http://opencv.jp/sample/video_io.html にある,カメラ画像をキャプチャする簡単なプログラムを入力してみる. http://is.ocha.ac.jp/~gradthesis/gyazo/e5050d95a226fa53fef9d6c8ce37df1b.png これを「ビルドと実行」してコンパイルするとエラーだらけ. http://is.ocha.ac.jp/~gradthesis/gyazo/be3092752bd7c6242a9e85e52679e229.png **ヘッダファイルとダイナミックライブラリを設定 [#md4f89e6] メニューバーの「プロジェクト」,「アクティブターゲットxxxxxxを編集」を選ぶ. このなかのダイアログから,「ビルド」タブを選ぶ. このなかの,「ヘッダ探索パス」に/opt/local/include/**を加える. http://is.ocha.ac.jp/~gradthesis/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/~gradthesis/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/~gradthesis/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解像度で動いていなくて、それで画質が悪いと思われる。