この記事について

OpenCV とカメラとビデオ

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

カメラ用のプラットフォーム

  • cvCreateCameraCapture に引数で0を指定すればカメラがauto detectされるが、以下のenumを渡すことで「明示的にこのカメラを使って欲しい」と指定できる。
  • いくつかのenumはエイリアスとして複数の名前を持っていたりするので、そういうのはまとめてみた。
  • OpenCV 2.4.3 基準
    キャプチャのenumライブラリ/インタフェースの名称詳細/解説enumの定数
    CV_CAP_VFWVFW:Video For Windows の略Windows上で使われるインタフェース。カメラもビデオも統合して同じインタフェースで利用できる。
    OpenCV1.0時代はこのインタフェースでキャプチャするのが普通だった。
    200
    CV_CAP_V4L
    CV_CAP_V4L2
    V4L:Video For Linux の略Linux のビデオキャプチャ用インタフェースで、1と2があるが、Kernel2.6.38からV4L1はサポート外となった。*2
    上記2点が基本的なライブラリで、実際VFWもV4LもCMakeのオプションにかかわらずOpenCVに組み込まれ、WindowsならVFW、LinuxならV4Lが組み込まれる。
    また、GStreamer *3があれば、GStreamerでのキャプチャも試されるが、どちらも使える場合はV4L、VFWなどが優先される。
    CV_CAP_DSHOWDirect ShowWindowsプラットフォームのキャプチャ方法。VFWを多機能にした感じのインタフェース。VFWの上位互換版と言ってもいいのかな?
    OpenCV内では videoInputというライブラリ*4に丸投げしてることから、videoInputと表されることもある。
    ちなみに公式でVideoInputをサポートするより前に魔改造でOpenCVに組み込んでる人たち*5*6が居たりする。
    700
    CV_CAP_STEREOCV_CAP_TYZXTYZXTYZX社の開発した技術で人物監視・追跡用のライブラリ*7
    ステレオ計算、ネットワークカメラの制御なども含む。
    ちなみにTYZXは「Physics」みたいな発音をするらしい*8
    400
    CV_CAP_FIREWIRECV_CAP_DC1394
    CV_CAP_DC1394_2
    CV_CAP_CMU1394
    IEEE1394IEEE1394カメラを制御するためのインタフェース
    インタフェースを提供するライブラリはCMU1394*9、DC1394、GStreamer*3の3つだが、
    GStreamerは仕様が変わったことに伴って、GStreamer経由でFirewireカメラを制御するAPIはオフにされている。
    300
    CV_CAP_MILMIL:Matrox Imaging LibraryMatrox社が開発したライブラリ*10100
    CV_CAP_QTQuickTimeAppleが開発するマルチメディアライブラリ。
    movファイルを扱うために使われる。主にMac向けに開発されていた経緯を持つが、Windowsでも利用可能*11
    500
    CV_CAP_UNICAPunicapunicapライブラリを使った*12600
    CV_CAP_OPENNIOpenNI言わずとしれたKinect操作用のライブラリ*13
    Xtionを使う場合はCV_CAP_OPENNI_ASUSのenumを使う。
    900
    CV_CAP_OPENNI_ASUS910
    CV_CAP_ANDROIDAndroidAndroid用のインタフェース。ハードウェアごとの問題がまだまだあるらしい1000
    CV_CAP_XIAPIXIMEAカメラメーカXIMEA
    それをキャプチャするためのライブラリ。*14
    1100
    CV_CAP_AVFOUNDATIONAV FoundationiOS用のカメラ制御ライブラリ。OSX Lionにも同等のAPIが実装されている。*15*161200
    CV_CAP_PVAPIGigaLinx, PvAPI, Prosilica GigE SDKGigE Vision 製カメラを制御するライブラリ。*17ライブラリはAllied Vision Technologyから提供されている。*18*191300
    CV_CAP_GIGANETIXSmartek Giganetix GigEVisionSDKGigE Vision 製カメラを制御するライブラリ。*17SMARTEK Visionがライブラリを開発している*20800
  • ちなみに、以下はその他のカメラライブラリ。2.4.3時点では未だOpenCVにサポートされていない。以下のライブラリやAPIを使う場合は、制御や画像の取得にはnativeのAPIを使用し、取得したあとにOpenCVに渡してやる必要がある。
    ライブラリ名解説
    FC2Point Grey Research社のカメラを使うためのライブラリFlyCapture。*21*22
    日本の代理店であるViewPlusではOpenCVでPGR製カメラを利用するためのサンプルコードが紹介されている。*23*24
    Code LaboratoryPlayStation Eyeを制御するためのSDK*25*26
    このSDKをインストールすると、PATH変数が消去されるという凶悪なバグが潜んでいるため、インストール時には注意が必要。
    PlayStation用のおもちゃと侮る無かれ。3000円程度と安価ながら、75fpsでのキャプチャが可能。これ結構すごいし、コストパフォーマンスが良い。

ビデオ用のインタフェース

  • ビデオ用のインタフェースもいろいろ組み込まれている。
  • カメラインタフェースの場合は明示的に「このライブラリでキャプチャ」というのを指定できたが、ビデオファイル用のインタフェースでは優先順位が決まっていて、変更できない*27
    ライブラリ名解説読み込み優先順位*28書き出し優先順位オプション
    FFMPEG*29最近のOpenCVに組み込まれている。
    ちょっと前はビルドオプションだったが、最近はデフォルトで組み込まれる。
    FFMPEGは基本的にVisualStudioでのビルドができない*30ため、Windows版ではビルド済みのバイナリとともに提供されている。
    こちらの記事*31を参考にすればWindows上でMinGWを使ってFFMPEGをビルドし直す手順が書かれている。
    公式に組み込まれたため、OpenCVはデフォルとでFFMPEGで開こうとする。MPEGとかも普通に読み込めるので結構便利
    12なし
    XINExine project というライブラリ*32を組み込んだ読み込みインタフェース。ファイルの書き出しの昨日が無い?2-HAVE_XINE
    GStreamer同上*335HAVE_GSTREAMER
    QuickTime同上*1144HAVE_QUICKTIME
    AVFOUNDATION同上*1553HAVE_AVFOUNDATION
    OpenNI同上*136-HAVE_OPENNI
    連番画像ファイルOpenCV2.0頃から実装された、連番画像ファイルを動画として扱う方法。
    JPGでもBMPでも、画像単体として読み込めるならOK。image-%04d.jpgみたいな形でファイル名を渡すと、連番のファイルを動画として開いてくれる。
    71なし
  • ちなみに書き出しと読み出しでは同じライブラリを使用するのだが、XINEでの書き出しは無効化されている。あとOpenNI経由の書き出しも実装されていない*33

最後に

  • 手島の担当は12月3日だけで、それは昨日投稿した記事でもう担当分は終わってるのだが、なんとなく空き枠が勿体無くて、カッとなって書いてみた。今は反省している。
  • もうネタがないので、あとは他の方々に任せるしか無い。
  • 企画者の @sakanazensen*34 くんに感謝!

:OpenCV :OpenCV 2.4


*1  Computer Vision Advent Calendar 2012, 2012-12-01閲覧
*2  V4L1 support was dropped in kernel 2.6.38.Video4Linux - Wikipedia, the free encyclopedia, 2012-12-02閲覧
*3  GStreamer: open source multimedia framework, 2012-12-02閲覧
*4  videoInput Library, 2012-12-02閲覧
*5  OpenCV/videoInput Libraryによるビデオキャプチャ - Point at infinity, 2012-12-02閲覧
*6  Momma's Wiki: OpenCV/複数台のカメラ - videoInputを使って複数台の動画像処理, 2012-12-02閲覧
*7  TYZX Technology, 2012-12-02閲覧
*8  OpenCV and TYZX: Video Surveillance, 2008-08, 2012-12-02閲覧。発音に関する記述は9pにあり。
*9  1394 Camera Driver - Main, 2012-12-02閲覧
*10  Matrix Imaging Library - Wikipedia, 2012-12-02閲覧
*11  QuickTime - Wikipedia, 2012-12-02閲覧
*12  unicap - The uniform API for image acquisition devices, 2012-12-02閲覧
*13  OpenNI - OpenNI > Home, 2012-12-08閲覧
*14  XIMEA - XIMEA, 2012-12-02閲覧
*15  AV Foundationプログラミングガイド, 2012-12-02閲覧
*16  Cocoaの日々: [iOS] AVFoundation のカメラでフォーカスと露出をタッチで合わせる, 2012-12-02閲覧
*17  GigaLinx - GigE vision products, 2012-12-02閲覧
*18  OpenCV with GigE Vision Cameras - Stack Overflow, 2012-12-02閲覧
*19  GigE SDK (PvAPI) - Allied Vision Technologies, 2012-12-02閲覧
*20  SMARTEK Vision, 2012-12-02閲覧
*21  Point Grey - FlyCapture - Camera Control & Image Acquisition Software, 2012-12-02閲覧
*22  秘密研究所 » 【OpenCV】PointGrey社のカメラからMat型・IplImage型のデータを得るクラス, 2012-12-02閲覧
*23  OpenCVによる Point Greyカメラのキャリブレーション - 株式会社ビュープラス, 2012-12-02閲覧
*24  チュートリアルOpenCV Viewer - 株式会社ビュープラス, 2012-12-02閲覧
*25  Code Laboratories > CL Studio Live, 2012-12-02閲覧
*26  Code Laboratories > Downloads, 2012-12-02閲覧
*27  当然インストールされてない/対応していないライブラリは優先もへったくれもなく使えない
*28  小さい方が優先される
*29  FFmpeg, 2012-12-02閲覧
*30  コンパイラはMinGWかGccしか使えない
*31  OpenCV/Building of opencv_ffmpeg.dll on OpenCV 2.3.1 - Point at infinity, 2012-12-02閲覧
*32  the xine project - Home, 2012-12-08閲覧
*33  そもそも、OpenNIでビデオの書き出しなんて無い?
*34  @sakanazensen, 2012-12-01閲覧

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-12-08 (土) 14:59:51 (1808d)