OpenCV、機械学習、はやりのDeep learningの環境構築の方法、サンプルの動かし方、APIの使い方、Tipsなどをすぐに忘れてしまうので、備忘録として記録している。記憶がなくなるスピードが、早いのでメモしておかないと再現できなくなる確率が高まっている。 最近、再度HDDを飛ばしてしまい、過去の自分のページに再度助けられた。 また、DNNモジュールを触る機会が増えているので、C++からPyhonへと鞍替え中。 内容を気にいっていただければ、twitterで紹介願います。
2013年2月25日月曜日
OpenCVのカメラ情報に関して調べてみた
以前 "OpenCVでカメラ情報を取得してみた" というエントリーの続き
どうしてもUSBカメラのパラメータを設定したいので、VideoCapture のソースを調べてみた。
VideoCaptureクラスは、
modules\highgui\src
の cap.cpp 内で定義されており、getの関数で、cvGetCapturePropertyが呼ばれている
cvGetCaptureProperty内では、capture->getProperty(id)を呼んでいるだけ
captureは、CvCaptureのポインタであり、cvCreateCameraCapture関数内のswitch (domains[i])
の処理で、システムが有するインタフェースに応じたクラスのインスタンスが生成されている。
各インタフェースに応じたクラスのソースは、同じmodules\highgui\srcのフォルダに格納されている
domainsは、
CV_IMPL CvCapture * cvCreateCameraCapture (int index)
{
int domains[] =
で定義されており、domainsの並びの順番で、どのインタフェースを優先して選ばれるかが決まる
実際は、ここで選ばれたインタフェースごとに、CvCaptureを継承する各インタフェースに対応したクラスのソースが準備されており、そのソース内で各カメラパラメータへのアクセスが実現されている
Windowsの場合、デフォルトでは、VFWが選ばれているような気がする
(自分でOpenCVをコンパイルをしていないため何が選ばれているか不明である)
内部には、
CV_IMPL int cvGetCaptureDomain( CvCapture* capture)
というどのdomainなのか調べる関数が準備されているが、VideoCaptureのクラスに呼び出す関数が無いため、外部からアクセスできなくなっている
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿