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のクラスに呼び出す関数が無いため、外部からアクセスできなくなっている

0 件のコメント:

コメントを投稿