大阪工業大学|情報科学部|ネットワークデザイン学科|西口研究室


リンク集

  • 画像キャプチャ用ライブラリ(DirectShowベース)
    • VideoInput (OpenCV1.1pre1以降で採用)
    • EWCLIB (プログラミングが容易)
  • 音声キャプチャ用ライブラリ
    • PortAudio

OpenCVでUSBカメラを使用する際のTips

  • OpenCV-1.1pre1 と EWCLIB16 はともにDirectShowベースのため相性が悪い.
  • したがって,2009/03/03現在は,以下の組み合わせが相性がよいと考えられる.
    • OpenCV-1.0(using VFW) + EWCLIB16
    • OpenCV-1.1pre1(including videoInput 0.1991 based on DirectShow) upgrade to videoInput 0.1995

OpenCV-1.0 for Windowsで,USBカメラの画像を640x480解像度でキャプチャする (2007/06/28)

  • OpenCV1.1pre1ではWindowsにおける画像入力用ライブラリにDirectXベースのVideoInputが採用されたため,Video for Windows用の以下の方法は,OpenCV1.1pre1ではうまく動きません.
  • OpenCV1.1pre1でも,私の試した範囲ではデフォルトでは640x480解像度でキャプチャすることはできませんでしたが,同梱されているvideoInputと同じバージョンのソースをいじってライブラリをコンパイルし,同梱版と入れ替えることでうまく640x480解像度キャプチャができます.
  • 最新バージョンのvideoInputで修正されているかどうかは調べていません.

OpenCV 1.0では,cvSetCapturePropertyの実装が完全ではなく,USBカメラでキャプチャしようとすると,強制的に320x240の解像度しか得られない場合がある. OpenCVのYahoo! groupsでも2005年にライブラリのソースコードを修正することによってこの問題に対処する方法が考えられているが,ライブラリを再コンパイルする必要があるなど,可搬性に乏しくなる.

しかしながら,やっぱり,性能のよいUSBカメラを使っているので,Yahoo!groupsで議論されていた内容をユーザプログラム側で実現できるか試した.

  • highguiで実現.cvcamは不使用.
  • アクロバチックなキャストをしているので,他の環境で動くかどうか不明.
  • 本当はインクルード不要なヘッダファイルや,内部で使用されている構造体を利用している.
  • エラー処理,メモリリークに関してはほとんど考慮していない.
  • 複数台のUSBカメラで動作するかは未確認.CvCapture はカメラごとにそれぞれ別のHWNDを持っているはずなので,なんとかなるのではないかと期待.
  • そもそも画像サイズを大きくすると,CPU負荷は高い気がする..
  • 必要なコードをヘッダファイルに分けました.(2007/07/03)
  • 動作確認環境(2007/07/05)
    • Windows XP SP2
    • Visual Studio 2005 Professional Edition + SP1
    • OpenCV 1.0 for win
    • QCam Orbit/MP, QCam Pro 5000, QCam Pro 9000(2008/04/11追加)
  • 確認方法
    • Win32, コンソールアプリケーションプロジェクトを作成,「空のプロジェクト」で作成.
    • 上記ファイルを「既存の項目を追加」で追加
    • インクルードパス,ライブラリパス,リンカの設定をOpenCV用に設定
  • Tips
    • もし,CvCaptureCAM_VFWが再定義されている,とエラーが出たら,usbcam_config.h内の該当部分を削除する.
    • カメラやドライバによっては動作しない場合があるようです。

jpeg画像の圧縮先と展開元をメモリにする (2007/06/12)

Independent JPEG Group が配布しているjpeg圧縮・展開ライブラリ(libjpeg)に含まれるサンプルは,圧縮先および展開元がファイルになっているため,そのままではjpegのバイナリイメージをネットワーク伝送したいときなどに不便である.

そこで,以下のURLで得られる情報に基づいて,RGB画像(ppm画像など)をjpegに変換し,そのバイナリイメージをメモリ上に生成(圧縮)する関数(jpeg_encode関数)や,jpegのバイナリイメージをRGB画像に変換する関数(jpeg_decode関数)を実装した.

  • libjpeg6bが必要である.
  • 動作確認はcygwin上で行った.
  • エラー処理,メモリリークに関してはほとんど考慮していない.

filejpegmem.tar.gz

コンパイル・実行例
% tar xvzf jpegmem.tar.gz
% cd jpegmem
% make
% ./sample.exe

※上記ページの作者に感謝します.


大阪工業大学|情報科学部|ネットワークデザイン学科|西口研究室


Last-modified: 2019-03-18 (月) 14:20:24