#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]
-cvCreateCameraCapture に引きすうで0を指定すればカメラがauto detectされるが、以下のenumを渡すことで「明示的にこのカメラを使って欲しい」と指定できる。
-いくつかのenumはエイリアスとして複数の名前を持っていたりするので、そういうのはまとめてみた。
-OpenCV 2.4.3 基準
|>|キャプチャの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閲覧};&br;ステレオ計算、ネットワークカメラの制御なども含む。&br;ちなみに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にあり。};|400|
|CV_CAP_FIREWIRE|CV_CAP_DC1394&br;CV_CAP_DC1394_2&br;CV_CAP_CMU1394|IEEE1394|IEEE1394カメラを制御するためのインタフェース&br;インタフェースを提供するライブラリはCMU1394&note{CMU-1394:[[1394 Camera Driver - Main>http://www.cs.cmu.edu/~iwan/1394/]], 2012-12-02閲覧};、DC1394、GStreamer&note{gstreamer-official};の3つだが、&br;GStreamerは仕様が変わったことに伴って、GStreamer経由でFirewireカメラを制御するAPIはオフにされている。|300|
|>|CV_CAP_MIL|MIL:Matrox Imaging Library|Matrox社が開発したライブラリ&note{wikipedia-MIL:[[Matrix Imaging Library - Wikipedia>http://ja.wikipedia.org/wiki/Matrox_Imaging_Library]], 2012-12-02閲覧};。|100|
|>|CV_CAP_QT|QuickTime|Appleが開発するマルチメディアライブラリ。&br;movファイルを扱うために使われる。主にMac向けに開発されていた経緯を持つが、Windowsでも利用可能&note{QuickTime-wikipedia:[[QuickTime - Wikipedia>http://ja.wikipedia.org/wiki/QuickTime]], 2012-12-02閲覧};|500|
|>|CV_CAP_UNICAP|unicap|unicapライブラリを使った&note{unicap-official:[[unicap - The uniform API for image acquisition devices>http://unicap-imaging.org/]], 2012-12-02閲覧};|600|
|>|CV_CAP_OPENNI|OpenNI|言わずとしれたKinect操作用のライブラリ。&br;Xtionを使う場合はCV_CAP_OPENNI_ASUSのenumを使う。|900|
|>|CV_CAP_OPENNI_ASUS|~|~|910|
|>|CV_CAP_ANDROID|Android|Android用のインタフェース。ハードウェアごとの問題がまだまだあるらしい|1000|
|>|CV_CAP_XIAPI|XIMEA|カメラメーカXIMEA&br;それをキャプチャするためのライブラリ。&note{ximea-official:[[XIMEA - XIMEA>http://www.ximea.com/]], 2012-12-02閲覧};|1100|
|>|CV_CAP_AVFOUNDATION|AV Foundation|iOS用のカメラ制御ライブラリ。OSX Lionにも同等のAPIが実装されている。&note{AVFoundation-pdf:[[AV Foundationプログラミングガイド>https://developer.apple.com/jp/devcenter/ios/library/documentation/AVFoundationPG.pdf]], 2012-12-02閲覧};&note{AVFoundation-sample:[[Cocoaの日々: [iOS] AVFoundation のカメラでフォーカスと露出をタッチで合わせる>http://cocoadays.blogspot.jp/2011/12/avfoundation.html]], 2012-12-02閲覧};|1200|
|>|CV_CAP_PVAPI|GigaLinx, PvAPI, Prosilica GigE SDK|GigE Vision 製カメラを制御するライブラリ。&note{gigalinx-official:[[GigaLinx - GigE vision products>http://www.gigalinx.net/index.html]], 2012-12-02閲覧};ライブラリは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閲覧};|1300|
|>|CV_CAP_GIGANETIX|Smartek Giganetix GigEVisionSDK|GigE Vision 製カメラを制御するライブラリ。&note{gigalinx-official};SMARTEK Visionがライブラリを開発している&note{smart-official:[[SMARTEK Vision>http://www.smartekvision.com/]], 2012-12-02閲覧};|800|
-ちなみに、以下はその他のカメラライブラリ。2.4.3時点では未だOpenCVにサポートされていない。以下のライブラリやAPIを使う場合は、制御や画像の取得にはnativeのAPIを使用し、取得したあとにOpenCVに渡してやる必要がある。
|ライブラリ名|解説|
|FC2|Point Grey Research社のカメラを使うためのライブラリFlyCapture。&note{FC2-official:[[Point Grey - FlyCapture - Camera Control & Image Acquisition Software>http://www.ptgrey.com/products/pgrflycapture/flycapture_camera_software.asp]], 2012-12-02閲覧};&note{sample-fc2-opencv:[[秘密研究所 » 【OpenCV】PointGrey社のカメラからMat型・IplImage型のデータを得るクラス>http://taishoh-lab.net/blog/?p=35]], 2012-12-02閲覧};&br;日本の代理店であるViewPlusではOpenCVでPGR製カメラを利用するためのサンプルコードが紹介されている。&note{viewplus-sample-19:[[OpenCVによる Point Greyカメラのキャリブレーション - 株式会社ビュープラス>http://www.viewplus.co.jp/tutorial/flycapture/page19.html]], 2012-12-02閲覧};&note{viewplus-sample-20:[[チュートリアルOpenCV Viewer - 株式会社ビュープラス>http://www.viewplus.co.jp/tutorial/flycapture/page20.html]], 2012-12-02閲覧};|
|Code Laboratory|PlayStation Eyeを制御するためのSDK&note{CL-official:[[Code Laboratories > CL Studio Live>http://codelaboratories.com/]], 2012-12-02閲覧};&note{CL-SDK-official:[[Code Laboratories > Downloads>http://codelaboratories.com/downloads/]], 2012-12-02閲覧};。&br;このSDKをインストールすると、PATH変数が消去されるという凶悪なバグが潜んでいるため、インストール時には注意が必要。&br;PlayStation用のおもちゃと侮る無かれ。3000円程度と安価ながら、75fpsでのキャプチャが可能。これ結構すごいし、コストパフォーマンスが良い。|


**ビデオ用のインタフェース [#v3831a24]
-ビデオ用のインタフェースもいろいろ組み込まれている。
-カメラインタフェースの場合は明示的に「このライブラリでキャプチャ」というのを指定できたが、ビデオファイル用のインタフェースでは優先順位が決まっていて、変更できない&note{library-priority:当然インストールされてない/対応していないライブラリは優先もへったくれもなく使えない};
|ライブラリ名|解説|優先順位&note{note:小さい方が優先される};|
|FFMPEG&note{ffmpeg-official:[[FFmpeg>http://ffmpeg.org/]], 2012-12-02閲覧};|最近のOpenCVに組み込まれている。&br;ちょっと前はビルドオプションだったが、最近はデフォルトで組み込まれる。&br;FFMPEGは基本的にVisualStudioでのビルドができない&note{ffmpeg-compiler:コンパイラはMinGWかGccしか使えない};ため、Windows版ではビルド済みのバイナリとともに提供されている。&br;[[こちらの記事>http://www.atinfinity.info/wiki/index.php?OpenCV%2FBuilding%20of%20opencv_ffmpeg.dll%20on%20OpenCV%202.3.1]]&note{ffmpeg-build-dandelion:[[OpenCV/Building of opencv_ffmpeg.dll on OpenCV 2.3.1 - Point at infinity>http://www.atinfinity.info/wiki/index.php?OpenCV%2FBuilding%20of%20opencv_ffmpeg.dll%20on%20OpenCV%202.3.1]], 2012-12-02閲覧};を参考にすればWindows上でMinGWを使ってFFMPEGをビルドし直す手順が書かれている。&br;公式に組み込まれたため、OpenCVはデフォルとでFFMPEGで開こうとする。MPEGとかも普通に読み込めるので結構便利|1|
|XINE|同上|2|
|GStreamer|同上|3|
|QuickTime|同上|4|
|AVFOUNDATION|同上|5|
|OpenNI|同上|6|
|連番画像ファイル|OpenCV2.0頃から実装された、連番画像ファイルを動画として扱う方法。&br;JPGでもBMPでも、画像単体として読み込めるならOK。image-%04d.jpgみたいな形でファイル名を渡すと、連番のファイルを動画として開いてくれる。|7|
-ちなみに書き出しと読み出しでは同じライブラリを使用するのだが、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閲覧}; くんに感謝!

[[:OpenCV]] [[:OpenCV 2.4]]


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