#contents

*この記事について [#zdb3c69b]
-この記事は[[Computer Vision Advent Calendar 2012>http://partake.in/events/13622c9b-3ada-4dd8-a967-56fe8927541b]]の2日目&note{cv-advent-calendar:[[Computer Vision Advent Calendar 2012>http://partake.in/events/13622c9b-3ada-4dd8-a967-56fe8927541b]], 2012-12-01閲覧};の担当記事
-詳しくは[[Computer Vision Advent Calendar 2012]]や公式ページ&note{cv-advent-calendar};を参照

*OpenCV とカメラとビデオ [#pfecc94a]
-画像処理やComputer Visionに携わっていると、画像、ビデオやカメラを扱う必要がありますよね。
-今回はOpenCVで取り扱えるカメラのプラットフォームに関してご説明。
-highgui_c.hとかcap.cppを調べあげてググったものです。
-やっつけ記事なので、ツッコミ大歓迎です

**カメラ用のプラットフォーム [#z3782f7a]
|>|キャプチャのenum|ライブラリ/インタフェースの名称|詳細/解説|enumの定数|
|>|CV_CAP_VFW|VFW:Video For Windows の略|Windows上で使われるインタフェース。カメラもビデオも統合して同じインタフェースで利用できる。&br;OpenCV1.0時代はこのインタフェースでキャプチャするのが普通だった。|200|
|CV_CAP_V4L&br;CV_CAP_V4L2|>|V4L:Video For Linux の略|Linux のビデオキャプチャ用インタフェースで、1と2があるが、Kernel2.6.38からV4L1はサポート外となった。&note{V4L-wikipedia:V4L1 support was dropped in kernel 2.6.38.[[Video4Linux - Wikipedia, the free encyclopedia>http://en.wikipedia.org/wiki/Video4Linux]], 2012-12-02閲覧};|~|
|>|>|>|上記2点が基本的なライブラリで、実際VFWもV4LもCMakeのオプションにかかわらずOpenCVに組み込まれ、WindowsならVFW、LinuxならV4Lが組み込まれる。&br;また、GStreamer &note{gstreamer-official:[[GStreamer: open source multimedia framework>http://gstreamer.freedesktop.org/]], 2012-12-02閲覧};があれば、GStreamerでのキャプチャも試されるが、どちらも使える場合はV4L、VFWなどが優先される。|~|
|>|CV_CAP_DSHOW|Direct Show|Windowsプラットフォームのキャプチャ方法。VFWを多機能にした感じのインタフェース。VFWの上位互換版と言ってもいいのかな?&br;OpenCV内では videoInputというライブラリ&note{videoinput-official:[[videoInput Library>http://www.muonics.net/school/spring05/videoInput/]], 2012-12-02閲覧};に丸投げしてることから、videoInputと表されることもある。&br;ちなみに公式でVideoInputをサポートするより前に魔改造でOpenCVに組み込んでる人たち&note{videoinput-dandelion:[[OpenCV/videoInput Libraryによるビデオキャプチャ - Point at infinity>http://www.atinfinity.info/wiki/index.php?OpenCV%2FvideoInput%20Library%E3%81%AB%E3%82%88%E3%82%8B%E3%83%93%E3%83%87%E3%82%AA%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3]], 2012-12-02閲覧};&note{videoinput-mswiki:[[Momma's Wiki: OpenCV/複数台のカメラ - videoInputを使って複数台の動画像処理>http://www.eml.ele.cst.nihon-u.ac.jp/~momma/wiki/wiki.cgi/OpenCV/%E8%A4%87%E6%95%B0%E5%8F%B0%E3%81%AE%E3%82%AB%E3%83%A1%E3%83%A9.html]], 2012-12-02閲覧};が居たりする。|700|
-CV_CAP_STEREO,CV_CAP_TYZX:TYZX
TYZX社の開発した技術で人物監視・追跡用のライブラリ&note{tyzx-technology:[[TYZX Technology>http://www.tyzx.com/technology/index.html]], 2012-12-02閲覧};
ステレオ計算、ネットワークカメラの制御なども含む。
ちなみにTYZXは「Physics」みたいな発音をするらしい&note{tutorial-tyxz:[[OpenCV and TYZX: Video Surveillance>http://prod.sandia.gov/techlib/access-control.cgi/2008/085776.pdf]], 2008-08, 2012-12-02閲覧。発音に関する記述は9pにあり。};
enumの実番号は400。
-CV_CAP_FIREWIRE:IEEE1394 カメラを制御するためのインタフェース
インタフェースを提供するライブラリは以下の3つだが、GStreamerはrev****から仕様が変わったことに伴って、GStreamer経由でFirewireカメラを制御するAPIはオフにされている。enumの実番号はいずれも300。
--DC1394
--DC1394_2
--CMU1394
--GStreamer &note{gstreamer-official};
-CV_CAP_MIL:Matrox Imaging Library
Matrox社が開発したライブラリ&note{wikipedia-MIL:[[Matrix Imaging Library - Wikipedia>http://ja.wikipedia.org/wiki/Matrox_Imaging_Library]], 2012-12-02閲覧};。enumの実番号は100。
-CV_CAP_QT:QuickTime
Appleが開発するマルチメディアライブラリ。movファイルを扱うために使われる。主にMac向けに開発されていた経緯を持つが、Windowsでも利用可能&note{QuickTime-wikipedia:[[QuickTime - Wikipedia>http://ja.wikipedia.org/wiki/QuickTime]], 2012-12-02閲覧};。enumの実番号は500。
-CV_CAP_UNICAP:UNICAP
&note{unicap-official:[[unicap - The uniform API for image acquisition devices>http://unicap-imaging.org/]], 2012-12-02閲覧};enumの実番号は600。
-CV_CAP_OPENNI:OpenNI
言わずとしれたKinect操作用のライブラリ。Xtionを使う場合はCV_CAP_OPENNI_ASUSのenumを使う。CV_CAP_OPENNIのenumは900で、CV_CAP_OPENNI_ASUSのenumは910。
-CV_CAP_ANDROID:Android用のインタフェース。enumの実番号は1000
-CV_CAP_XIAPI:XIMEA
&note{ximea-official:[[XIMEA - XIMEA>http://www.ximea.com/]], 2012-12-02閲覧};
カメラメーカXIMEA
それをキャプチャするためのライブラリ。enumの実番号は1100。
-CV_CAP_AVFOUNDATION:AVFoundation
&note{AVFoundation-pdf:[[AV Foundationプログラミングガイド>https://developer.apple.com/jp/devcenter/ios/library/documentation/AVFoundationPG.pdf]], 2012-12-02閲覧};
&note{AVFoundation-sample:[[http://cocoadays.blogspot.jp/2011/12/avfoundation.html]], 2012-12-02閲覧};
iOS用のカメラ制御ライブラリ。OSXLionにも同等のAPIが実装されている。enumの実番号は1200。
-CV_CAP_GIGANETIX:GiganetIX  Smartek Giganetix GigEVisionSDK
GigE Vision 製カメラを制御するライブラリ。ライブラリはAllied Vision Technologyから提供されている。&note{gige-qa:[[OpenCV with GigE Vision Cameras - Stack Overflow>http://stackoverflow.com/questions/3345467/opencv-with-gige-vision-cameras]], 2012-12-02閲覧};
&note{gige-AVI:[[GigE SDK (PvAPI) - Allied Vision Technologies>http://www.alliedvisiontec.com/us/products/software/windows/avt-pvapi-sdk.html]], 2012-12-02閲覧};
enumの実番号は1300。
-ちなみに、その他のカメラライブラリ。2.4.4時点では未だサポートされていない。以下のライブラリやAPIを使う場合は、制御や画像の取得にはnativeのAPIを使用し、取得したあとにOpenCVに渡してやる必要がある。
-FC2
Point Grey Research社のカメラを使うためのライブラリFlyCapture。
&note{sample-fc2-opencv:[[秘密研究所 » 【OpenCV】PointGrey社のカメラからMat型・IplImage型のデータを得るクラス>http://taishoh-lab.net/blog/?p=35]], 2012-12-02閲覧};
日本の代理店であるViewPlusではOpenCVでPGR製カメラを利用するためのサンプルコードが紹介されている。&note{viewplus-sample-19:[[OpenCVによる Point Greyカメラのキャリブレーション - 株式会社ビュープラス>www.viewplus.co.jp/tutorial/flycapture/page19.html]], 2012-12-02閲覧};&note{viewplus-sample-20:[[チュートリアルOpenCV Viewer - 株式会社ビュープラス>www.viewplus.co.jp/tutorial/flycapture/page20.html]], 2012-12-02閲覧}; 
-Code Labolatory(PS Eye)
PlayStation Eyeを制御するためのSDK。
このSDKをインストールすると、PATH変数が消去されるという凶悪なバグが潜んでいるため、インストール時には注意が必要。
PlayStation用のおもちゃと侮る無かれ。3000円程度と安価ながら、75fpsでのキャプチャが可能。これ結構すごいし、コストパフォーマンスが良い。


**ビデオ用のインタフェース [#v3831a24]
-FFMPEG&note{ffmpeg-official};
最近のOpenCVに組み込まれている。
公式が組み込む前はOpenCVFFMpegなんてプロジェクトもあったぐらいなのに。
FFMPEGは基本的にVisualStudioでのビルドができない(コンパイラはMinGWかGCCしか使えない)ため、Windows版ではビルド済みのバイナリとともに提供されている。
こちらの記事&note{ffmpeg-build-dandelion};を参考にすればWindows版でMinGWを使ってFFMPEGをビルドし直す手順が書かれている。
公式に組み込まれたため、OpenCVはデフォルとでFFMPEGで開こうとする。
MPEGとかも普通に読み込めるので結構便利
-XINE:同上
-GStreamer:同上
-QuickTime:同上
-AVFOUNDATION:同上
-OpenNI:同上
-連番画像ファイル:OpenCV2.0頃から実装された、連番画像ファイルを動画として扱う方法。
JPGでもBMPでも、画像単体として読み込めるならOK。image-%04d.jpgみたいな形でファイル名を渡すと、連番のファイルを動画として開いてくれる。
-ちなみに書き出しでは同じライブラリを使用するのだが、XINEでの書き出しは無効化されている。あとOpenNI経由の書き出しも実装されていない&note{XINE-writeout:そもそも、OpenNIでビデオの書き出しなんて無い?};。





*最後に [#w19ac7cb]
-手島の担当は12月3日だけで、それは[[昨日投稿した記事>Computer Vision Advent Calendar 2012]]でもう担当分は終わってるのだが、なんとなく空き枠が勿体無くて、カッとなって書いてみた。今は反省している。
-もうネタがないので、あとは他の方々に任せるしか無い。
-企画者の [[@sakanazensen>https://twitter.com/sakanazensen/]]&note{twitter-sakanazensen:[[@sakanazensen>https://twitter.com/sakanazensen/]], 2012-12-01閲覧}; くんに感謝!

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS