インテルがオープンソース化し,Willow Garageに引き継がれた画像処理ライブラリ.
基本的なフィルタ処理は勿論のこと、オープンソース化した恩恵としてSnakesやら顔の認識やらオプティカルフローやらステレオマッチングやら様々な機能が追加されている。 画像を扱うにあたり、車輪の再発明を避けるためにも外部ライブラリの積極利用は必須となる。
※Ver. 2.xへの対応中の為、古い記述が混じっています
※サンプルソースは記載時のバージョンでのみ動作確認の行なっているため、現バージョンでは動かない可能性もあります。その際はコメントにその旨記入して下さい。
リファレンスマニュアル日本語訳、日本語でのサンプルソース
OpenCV本(mycomから)の出版に合わせて(?)公開された、本家のリファレンスの日本語訳とサンプルソース。 非常に参考になる。
Ver. 2.x ダイジェスト
Python + OpenCV + Windowsの環境構築
メーカの提供するSDKしか使えないカメラでの動画像処理の例は
サポートベクタマシンやニューラルネットワークによる分類器等の機械学習については
CvCalibFilter(内部でサブピクセル処理)を使ったキャリブレーションについては
様々なトピック
- .NET GUI - C++/CLIのmanaged extensionsを使った.NET GU...
- 0 はじめにやること - Windowsでの開発環境構築についてのまとめ ※Ver. 1.x環境 W...
- 2次元フーリエ変換 - cvDFTを使った2次元フーリエ。簡単に出来るかと思ったら死ぬほど面倒だっ...
- 32F画像の表示 - CV_32Fで定義されるfloat画像の表示について 0~1が8bit画像...
- CvCalibFilter - キャリブレーションを行なうclass CvCalibFilterによるステ...
- CvCalibFilterによるUndistort - CvCalibFilterを使った歪み補正 cvaux.hで定義されている...
- CvCalibFilterによるステレオ視 - CvCalibFilterを使って2カメラキャリブレーションを行なってのス...
- CvGLCM - テクスチャ解析に用いる同時生起行列(GLCM: Grey-Level Co...
- Gabor Filter - Gabor Filterで遊んでみた http://www.eml.ele...
- HSVからRGBへの変換 - HSV表色系の値をRGBへ変換 cvCvtColorを使う。 H (Cha...
- Kasvandの反復型線検出オペレータ - 細線化より単純にスケルトンを抽出 cvFilter2Dによる2次元フィルタ...
- Kinect - KinectおよびXtion Proなどの互換機との連携 VTKでPoin...
- Kinect/Xtion Proの導入 - Xtion ProをOpenCVで使ってみる とりあえずWindows 7...
- Mac OSX環境 - OpenCV関係でMac OS Xに特化した話
- Mac OSX環境/SVN版のインストール - Mac OS XでSVN版をインストール Macportsのopencvで...
- OpenCV2.x - 2.xに関するメモ ※includeファイル、ライブラリファイルに大幅な変...
- OpenCV2.x/0 はじめにやること - OpenCV 2.xのWindows (C/C++) での開発環境の構築 ...
- OpenCV2.x/1.x->2.x - OpenCV 1.xから2.xへの移行メモ 大幅な変更がある。C++インタ...
- OpenCV2.x/C++ API - OpenCVのC++インターフェイスを試してみる SSII2010講演会の...
- OpenCV2.x/C++ API/Xcode - Mac OS XのXcode上でのメモ ※Macは素人なので当たり前の内容...
- OpenCV2.x/C++ API/例01 - 基本的な使い方 imread, imshow, imwrite, Mat,...
- OpenCV2.x/C++ API/例02 - ROIを使ったマルチビュー C++ APIではROIをReleaseする必...
- OpenCV2.x/Python - PythonでOpenCV (cv2) C++風のI/Fになるcv2モジュ...
- OpenCV2.x/Python/dft - C++のサンプルのdft.cppを基に作成 Matは無く,取得される画像は...
- OpenCV2.x/Python/fitEllipse - 楕円フィッティングへの引数の点列がおかしいのでメモ Python: cv....
- OpenCV2.x/matcher_simple - SURFとSIFTの簡単な例(C++) samples/cppに収録された...
- OpenCV2.x/mixChannels - Matで1ch画像を3ch画像に変換する リファレンスの解説だと意味が分か...
- OpenCV2.x/saturate_cast - 型に応じたクリッピング OpenCV2.xの機能。 uchar a = s...
- OpenCV2.x/サンプルについて - サンプル(samples\c)について 差分表示ソフトでざっと見比べたメモ...
- OpenCVの動向 - Yahoo!GroupsやGoogleあたりに流れてくるOpenCVの動向...
- OpenMP - OpenMPによるマルチスレッド並列プログラミング ※試行錯誤中なので参考...
- OpenMP/ループ構文 - forループを並列化 #pragma omp parallel for [...
- Photron製FDM-PCI - PhotronのFDM-PCIが発掘されたので試してみる。 APIが公開さ...
- ROIの使い方 - Region Of Interest:着目領域(要するにウィンドウ)を使う...
- SIFT - Rob HessによるSIFTのOpenCVによる実装 Rob Hess ...
- SVN版 - SVN版について色々メモ 大幅に変わっているので纏めておく。リポジトリの内...
- SVN版/Branchの利用 - SVNから2.2の安定版を入手する方法 2.2からBranchを利用して行...
- SVN版/CheatSheet - C++インターフェイス用のチート集 C++インターフェイスが充実してきたの...
- SVN版/Pythonインターフェイス - SVN版はビルド後にsite-packagesへインストールしてくれないの...
- SVN版/cvSetWindowProperty - Windowの状態切り替え 現在のところこれだけ。Windowを作成する時...
- SVN版/従来のヘッダの廃止 - include/opencv/cv.h等の従来使われてきたヘッダの廃止 モ...
- TIFFとPNGでの16Bit画像 - 16Bit画像の扱い方 グレースケールで16Bit画像を扱う場合 環境依存...
- Thinning (Python) - 細線化 (Thinning) のPython版 検索が多いので掲載 htt...
- Ver.1.x - OpenCV Ver. 1.xについて 旧バージョンとごっちゃにならないよ...
- VisualC2005 - Visual C++ 2005での環境構築 一応ビルドは成功。動作確認は殆...
- cvBlobslib - cvBlobslibで物体抽出 ※ソースのコメントが非英語なので不明な点が...
- cvCaptureFromCAMでのキャプチャサイズの変更 - 未実装だったcvSetCapturePropertyでのサイズ変更について...
- cvMinEnclosingCircleの精度が酷い - cvMinEnclosingCircleの精度を上げる 本家MLにも出てい...
- cvResizeの応用 - 扱う画像が巨大になるとcvShowImageでは表示しきれなくなる。おおま...
- cvWaitKey問題 - amd64なLinux(Ubuntu)でビルドするとcvWaitKeyの返...
- cvblob - cvblobslibよりシンプルなblob抽出(ラベリング処理)ライブラリ...
- floodFillでラベリング - floodFill関数を用いてラベリング処理 任意の色で塗り潰しが可能なf...
- jpeglib - cvLoadImageを使わないでjpegの画像を開く CLRのWindo...
- オプティカルフロー - USBカメラでオプティカルフロー opencv.jp - OpenCV: ...
- カラー画像からチャネル画像を作成 - カラー画像をRed, Green, Blue, (Alpha)のチャネルに...
- ヒストグラム - CvHistogramを使ったヒストグラムの算出 多次元ヒストグラムを想定...
- ピクセル値の参照 - ポインタからダイレクトに画像の値を参照 faq - OpenCV Libr...
- フラクタル次元 - ボックスカウント法 (box counting method)でフラクタル...
- フーリエ変換 - doubleの配列データをcvDFTを用いて1次元のフーリエ変換を行なう ...
- プログラムの作成 - OpenCVを使って画像を弄るプログラムの作成 Introduction ...
- 便利そうな関数 - 使えそうな関数のメモ書き float cvFastArctan( floa...
- 動画像処理プログラム - OpenCVのcvcam.hを使って動画像処理プログラムの作成 以下に使い...
- 動画像処理プログラム2 - どうやらcvcam.hは廃れる運命にあるらしい。cvCaptureFrom...
- 多チャンネルでのcvLUT - 多チャンネル画像でのcvLUTの使い方 当たり前だがLUTのマトリクスは原...
- 教材 - ゼミ等で使用する画像の作成。その他諸々。
- 教材/cvThreshold用 - しきい値処理用の素材作り 各濃度でその値を記載した画像。cvThresho...
- 機械学習 - ml.hで提供されている機械学習について http://archive.i...
- 機械学習/SupportVectorMachine - CvSVMによるサポートベクタマシン(SVM: Support Vecto...
- 機械学習/k近傍法 - k近傍法(あるいはk最短近傍分類: k-nearest neighbour...
- 機械学習/letter_recog.cpp - サンプルのletter_recog.cppについて Random Tree...
- 機械学習/n-fold Cross Validation - OpenCVの機械学習で交差確認(n-fold Cross Validat...
- 機械学習/導入 - 機械学習を使えるようにする ml.hはWindowsの場合は通常 C:\P...
- 画像の正規化 - 最小・最大値を0, 255に合うよう変換 変換後の濃度値=変換前の濃度値*...
- 直線のフィッティング - 座標点の集合から直線のフィッティングをする 座標点の集合を作成して、cvF...
- 窓関数(windowing) - DFTの前に窓関数を適用してみる DFTは原理的に対象とする画像が、上下左...
- 細線化 - 白黒画像(背景が黒)の細線化。OpenCVに関数が無い(?)ので作ってみた...
- 複数台のカメラ - videoInputを使って複数台の動画像処理 http://www.em...
- 距離計測 - ステレオマッチング(二眼カメラ)による距離計測 ※CvCalibFilte...
- 過去のコメント - コメントの過去ログ Tue Sep 18 18:35:11 GMT 200...
- 配布用パッケージの作成 - 自分でビルドしたOpenCVを配布パッケージにする インストール時にソース...
- 関数リファレンス - OpenCVで使う関数の簡単な解説
- 関数リファレンス/CvPoint - 座標構造体 typedef struct CvPoint { int x;...
- 関数リファレンス/cvCaptureFromCAM - カメラからのキャプチャを有効化 cvCaptureFromCAMでのキャプ...
- 関数リファレンス/cvCreateVideoWriter - avi等のビデオファイルに動画を保存する。 非圧縮aviの保存も参照 ty...
- 関数リファレンス/cvCvtColor - 色空間の変換 HSVからRGBへの変換も参照 void cvCvtColo...
- 関数リファレンス/cvCvtPixToPlane - 画像をチャネル(デフォルトのIplImageだとBlue,Green,Re...
- 関数リファレンス/cvFindStereoCorrespondence - 二枚のステレオ視の画像から視差を算出する。実際にはこの視差にパラメータを乗...
- 関数リファレンス/cvMinMaxLoc - 画像の最小・最大値とその座標を求める void cvMinMaxLoc( ...
- 関数リファレンス/cvQueryFrame - フレーム画像を取得 /* Just a combination of cv...
- 関数リファレンス/cvSub - 画像の差分処理 出力画像=画像A-画像Bだが、処理マスクが指定されていると...
- 関数リファレンス/cvcamSetProperty - カメラの設定 cvcamSetProperty(カメラ番号(0から), 設...
- 非圧縮aviの保存 - cvCreateVideoWriterで負荷を少なく動画を保存 高速フレー...
- 高速フレームレートの動画を保存するには - カメラのスペックに近いフレームレートで動画を保存する方法 遅い。まぁディス...
参照ページ(本家)
Ver. 1.x ダイジェスト
とりあえず動くプログラムを作る場合は
USBカメラを使った動画像処理は
cvcamを使わずにDVカメラの動画像処理を行なう(DirectShowとのニコイチPG)
videoInputを使って複数台のカメラを同時に処理する場合は
コメント、質問等どうぞ
- Fri Jan 16 16:42 2009 ?k: SIFTでのlibgslのビルドをするところで質問なのですが、libgsl.slnファイルを開いたあとRelease-Staticlibというものが見当たりません。自分のやり方が悪いのかもしれませんがもう少し詳しく教えてください。
- Fri Jan 16 17:26 2009 momma: [プロジェクト]メニューの[libglsのプロパティ]を開き、構成プロパティを選択した後に「構成:アクティブ(Debug-DLL)」となっている所をクリックすると出て来ませんかね。Visual Studioのバージョンは何でしょうか?
- Fri Jan 16 19:48 2009 ?k: バージョンは8.0.50727.42です。ちゃんとRelease-Staticlibがありました。詳しく説明していただきありがとうございます。
- Mon Jan 19 17:53 2009 ?k: また初歩的な質問なのですが、SIFTの説明でlibgsl.libとlibglscblas.libをVCにライブラリパスとして登録済みのc:\local\libへコピーするとあるのですが、c:\local\libがどこなのかよくわかりません。また詳しく教えていただけないでしょうか。
- Tue Jan 20 13:03 2009 momma: local\libは私が使い易いようにライブラリを一括して置く事に決めた場所なので、libgsl.libの出来上がったフォルダをライブラリパスに登録すれば使えるようになります。ここら辺はOpenCVに限らずその他のライブラリでも共通の事項なのでインクルードパス、ライブラリパスの意味を理解しておく必要があります。VCでのインクルードパスの追加、VCでのライブラリパスの追加、プロジェクトへのライブラリの追加が参考になるかと思います。
- Tue Jan 20 15:12 2009 ?k: わかりました。ありがとうございます。フォルダをパスに登録してsiftFeat.slnをビルドしてみたのですが、ファイル`cvd.lib`を開くことができませんというエラーがでてしまいます。これは先ほどのパスの登録の方法が違うのでしょうか?それとも他の原因があるのでしょうか?
- Tue Jan 20 15:44 2009 ?k: すいません。ちょっと間違えていたようです。
- Tue Jan 20 16:18 2009 ?k: たびたびすいません。siftFeat.slnを開いてビルドしたのですがなにも起きません。もし原因などがわかるようならおしえていただけないでしょうか?
- Tue Jan 20 16:51 2009 ?k: いろいろやってみた結果うまくいきました。ありがとうございました。
- Sun Feb 08 15:32 2009 ?mdrfy: 初めまして。CvCalibFilterによるステレオ視についてお聞きしたいのですが、ここでのキャリブレーション画像は画像の端などが黒く欠落するのですが、それはチェスボードをヒラヒラさせる範囲が狭いからなのでしょうか。また、画像に横にはしるノイズが出ますが、これの原因と消す対策などはありますでしょうか。ご回答宜しくお願いします。
- Tue Feb 10 13:53 2009 momma: キャリブレーションによる周囲の欠落ですが、恐らく特徴点の連結が不足しているのも原因かと思います。キャリブレーションに使う画像数を増やしてみては如何でしょうか。ノイズは視差画像の横線の事かと思いますが、マッチングに失敗している場所で原画像で飽和している箇所や露出不足の箇所に現われるケースがありますので、カメラや照明の条件を検討されては如何でしょうか。また、視差画像に対して縦方向のメディアンや平均化フィルタを施すと場当たり的対処にはなると思います。或いはノイズの箇所はマッチング無しとして、有効な部分のみで補間する等も考えられます。
- Tue Feb 10 23:15 2009 ?mdrfy: ご回答ありがとうございました。色々試してみたいと思います。
- Fri Feb 13 08:48 2009 ?mdrfy: たびたびの質問申し訳ありません。”マッチングに失敗している場所で原画像で飽和している箇所や露出不足の箇所”がよく分からないので、御教示頂けますでしょうか。また、深さ不連続についての論文を読みましたが、このアルゴリズムは、深さ不連続を検出するもので、深さ不連続は明暗度が変化するところにあり、視差が大きいものは近いもので、小さいものは遠いものとして扱う、と解釈したのですが、間違った解釈でしょうか。ご回答宜しくお願いいたします。
- Fri Feb 13 11:30 2009 momma: 難しい話ではなく、撮影時に明る過ぎて白飛びするか、暗過ぎて真っ黒になってしまうと、対応が取れないのでは?という意味です。照明の写り込みや、陰の部分は情報が欠落していますので。
- Sat Feb 14 21:39 2009 ?mdrfy: ありがとうございました。
- Wed Feb 18 10:45 2009 ?mdrfy: 上でお聞きしたことは光が強く当たる床などを撮影することで理解できました。それで、今度はキャリブレーションについてお聞きしたいのですが、win0とwin1で表示される画像が回転している理由と、”特徴点の連結が不足している”ということを、教えていただきたいです。度々の質問ほんとうに申し訳ありません。
- Sat Feb 28 10:32 2009 ?mdrfy: しばらく待ってもご回答頂けなかったので・・。せめてwin0とwin1の画像が欠落していたり回転しているように表示される理由を教えていただきたいです。キャリブレーションの補正によるものなのでしょうか。それとも画像座標と世界座標の対応がとれていないところが欠落しているのでしょうか。ご回答お願いします。
- Sat Feb 28 17:44 2009 momma: キャリブレーションのデモは時間が取れたら作成する予定です。win0とwin1が回転してと言うのはrectify後ですか?前ならデバイス依存が原因なのでgetPixels関数の最後の引数を変えると直ります。キャリブレーションは平面上でキャリブレーションボードを動かしてみるとどうでしょうか。
- Sun Mar 01 15:00 2009 ?mdrfy: ありがとうございます。rectifyというのは左右のカメラの画像を平行になるようにしてやるということですよね?カメラの位置を揃えてやってボードを使いキャリブレーションを行うたびに画像が毎回異なる回転をしているのでどうしてなのか考えておりました。
- Wed Apr 15 21:23 2009 ?kenchan: 機械学習/導入のmlsvm.cppの修正箇所はこれだけですか? なぜか修正後のmld.libを使用すると4120byteのメモリリークが発生するのですがどういうことでしょうか?
- Thu Apr 16 18:48 2009 momma: これだけです。どのプログラムで使用して、どの関数を呼んだ時点でメモリリークが発生するのか教えて頂けると判るかも知れません。デバッガで追い掛けた結果を教えて貰えますでしょうか。
- Thu Apr 16 21:21 2009 ?kenchan: メールを送らせてもらいました。どうか確認よろしくお願いします
- Sat Feb 05 17:37 2011 ?ykuri: linuxの場合,cvcap_vfw.cppのファイルはどのような名前になっているのでしょうか。また,格納場所はどこなのか教えていただけないでしょうか。
- Mon Feb 07 20:24 2011 momma: Linuxはあまり弄っていないので即答できませんが、おそらく解像度の変更方法かと思います。opencvのソースを展開したフォルダで grep -R CV_CAP_PROP_FRAME * を実行してみると分かるかと思いますが、cmakeで設定した動画キャプチャの手段によって異なります。setPropertyの中でswitchしている箇所がありますので、該当する手段での実装具合を確かめると良いかと思います。分からなかったら調べてみますので設定したキャプチャ手段を教えて下さい。
- Tue Feb 08 07:21 2011 momma: 念の為ですが、vfwはvideo for windowsの略ですのでwindows向けのソースです。
- Fri Feb 11 15:41 2011 ?ykuri: お礼が遅くなりまして申し訳ありません。わかりやすく丁寧に教えていただきありがとうございます。現在調査中でして,お言葉に甘えることになると思いますがそのときはよろしくお願いします。
- Fri Feb 11 16:38 2011 ?ykuri: そもそも,opencv1.0.0にはcvcap.cppなるものはそんざいするのでしょうか?色々調べた結果,未実装とか・・・。