4

ウェブカメラのfpsと解像度を設定し、v4l2Pythonを介してそこからキャプチャしようとしています。

v4l2Pythonのドキュメントは;に制限されています。

>>> import v4l2
>>> import fcntl
>>> vd = open('/dev/video0', 'rw')
>>> cp = v4l2.v4l2_capability()
>>> fcntl.ioctl(vd, v4l2.VIDIOC_QUERYCAP, cp)
0
>>> cp.driver
'ov534'
>>> cp.card
'USB Camera-B4.09.24.1'

videodev2.hを見てください;

#define VIDIOC_S_PARM       _IOWR('V', 22, struct v4l2_streamparm)

VIDIOC_S_PARMは、;であるv4l2_streamparmに関連しています。

struct v4l2_streamparm {
    enum v4l2_buf_type type;
union {
    struct v4l2_captureparm capture;
    struct v4l2_outputparm  output;
    __u8    raw_data[200];  /* user-defined */
} parm;
};

そして、パラメータを設定したい場合;

import v4l2
import fcntl
vd = open('/dev/video1', 'rw')
cp = v4l2.v4l2_streamparm()
fcntl.ioctl(vd, v4l2.v4l2_streamparm, cp)

これは私が得ることができる限りです。

Python v4l2を使用してカメラのfpsレートと解像度を調整し、そこから画像をキャプチャするにはどうすればよいですか?

4

1 に答える 1

4

V4L2 側から、次のことを行う必要があります。

  • VIDIOC_G_PARMioctl を使用し、v4l2_streamparm.parm.capture.capabilityメンバーをチェックして、ドライバーが許可しているかどうかを調べますV4L2_CAP_TIMEPERFRAME
  • その場合は、ioctl を使用して、VIDIOC_ENUM_FRAMEINTERVALS可能なフレーム間隔 (フレームレートの逆数) のリストをv4l2_fract構造体の形式で取得します。
  • これらの値をVIDIOC_S_PARMioctl で使用し、v4l2_streamparm.parm.capture.timeperframeメンバーを埋めます。

これにより、キャプチャ側のフレーム レートを設定できるようになります。フレームドロップが発生しないように、十分に速く読んでいることを確認するのはあなたの仕事です.

于 2012-12-21T14:21:38.947 に答える