V4l2 camera设置手动曝光

1 篇文章 0 订阅
这段代码主要涉及相机控制接口的操作,包括获取和设置自动曝光、手动曝光、绝对曝光值以及增益控制。首先检查V4L2_CID_EXPOSURE_AUTO状态,然后设定为手动曝光并设置曝光时间为10毫秒。接着获取和设置曝光绝对值,并调整增益到最大值。
摘要由CSDN通过智能技术生成
    {
        // query exposure para
        struct v4l2_control ctrl;
        ctrl.id = V4L2_CID_EXPOSURE_AUTO;
        if (ioctl(camera.videofd, VIDIOC_G_CTRL, &ctrl)) {
            camera_err("V4L2_CID_EXPOSURE_AUTO");
        } else {
            camera_print("V4L2_CID_EXPOSURE_AUTO value:%d\n", ctrl.value);
        }

        //set fixed exposure for no skipping frame
        ctrl.id = V4L2_CID_EXPOSURE_AUTO;
        ctrl.value = V4L2_EXPOSURE_MANUAL;
        if (ioctl(camera.videofd, VIDIOC_S_CTRL, &ctrl)) {
            camera_err("V4L2_EXPOSURE_MANUAL");
        } else {
            camera_print("set V4L2_EXPOSURE_MANUAL\n");
        }

        struct v4l2_queryctrl setting;
        setting.id = V4L2_CID_EXPOSURE;
        if (ioctl(camera.videofd, VIDIOC_QUERYCTRL, &setting)) {
            camera_err("VIDIOC_QUERYCTRL");
        } else {
            camera_print("ctrl id:%d name:%s min:%d max:%d step:%d default:%d flags:%d\n",
                    setting.id, setting.name, setting.minimum, setting.maximum, setting.step, setting.default_value, setting.flags);
        }

        ctrl.id = V4L2_CID_EXPOSURE_ABSOLUTE;
        if (ioctl(camera.videofd, VIDIOC_G_CTRL, &ctrl)) {
            camera_err("V4L2_CID_EXPOSURE_ABSOLUTE");
        } else {
            camera_print("V4L2_CID_EXPOSURE_ABSOLUTE value:%d\n", ctrl.value);
        }

        ctrl.id = V4L2_CID_EXPOSURE_ABSOLUTE;
        ctrl.value = 1;
        if (ioctl(camera.videofd, VIDIOC_S_CTRL, &ctrl)) {
            camera_err("V4L2_CID_EXPOSURE_ABSOLUTE");
        } else {
            camera_print("set V4L2_CID_EXPOSURE_ABSOLUTE value:%d\n", ctrl.value);
        }

        ctrl.id = V4L2_CID_EXPOSURE;
        ctrl.value = 10000000;//ns (10ms)
        if (ioctl(camera.videofd, VIDIOC_S_CTRL, &ctrl) != 0) {
            camera_err("VIDIOC_S_CTRL");
        } else {
            camera_print("set exposure %d\n", ctrl.value);
        }

        setting.id = V4L2_CID_GAIN;
        if (ioctl(camera.videofd, VIDIOC_QUERYCTRL, &setting)) {
            camera_err("VIDIOC_QUERYCTRL");
        } else {
            camera_print("ctrl id:%d name:%s min:%d max:%d step:%d default:%d flags:%d\n",
                    setting.id, setting.name, setting.minimum, setting.maximum, setting.step, setting.default_value, setting.flags);
        }
        ctrl.id = V4L2_CID_GAIN;
        ctrl.value = setting.maximum;
        if (ioctl(camera.videofd, VIDIOC_S_CTRL, &ctrl) != 0) {
            camera_err("VIDIOC_S_CTRL");
        } else {
            camera_print("set gain %d\n", ctrl.value);
        }
    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QT V4L2是指QT开发平台上的V4L2(Video for Linux 2)视频驱动程序,用于支持Linux平台上的低层次音频和视频设备的接口规范。QT是一款跨平台的C++图形应用程序开发框架,在移动平台、桌面平台、嵌入式系统等各种场景下都得到了广泛应用。V4L2是Linux下用于处理视频设备(例如摄像头)的API,同时也支持音频设备。V4L2可以直接调用Linux内核中的设备驱动程序,实现数据的采集、处理、传输等功能。 QT V4L2 Camera是指两者结合起来,实现在Linux平台上进行摄像头数据采集和实时视频处理的应用。基于QT V4L2 Camera,开发者可以实现各种各样的应用,例如视频监控、视频会议、人脸识别、图像识别等领域。通过QT V4L2 Camera,开发者可以方便地实现数据采集、处理、呈现和存储等功能,并且具有高度的灵活性和可扩展性。 在实际应用中,QT V4L2 Camera的优势不仅在于其功能强大,还在于它跨平台、开放源代码、易学易用、具有丰富的社区支持等方面,大大降低了开发者的开发成本和学习门槛,同时可以保证应用的可移植性和可维护性。 综上所述,QT V4L2 Camera是一款非常重要的视频采集和处理框架,它为开发者提供了丰富的功能和高度的灵活性,同时又具备跨平台、易学易用、开放源代码等优势,是开发基于Linux平台的视频应用的最佳选择之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值