我正在使用OpenCV 3.1和
Python 2.7从我的网络摄像头Logitech C270中捕获视频帧.我也使用video4linux2(v4l2)来设置我的相机的属性,但这导致了一些问题.我的操作系统是Ubuntu 15.04.
我想要改变的具体属性是absolute_exposure.
我可以通过终端使用v4l2 API手动更改它,使用命令v4l2-ctl –set-ctrl exposure_absolute = 40,它运行良好,但我需要为此任务编写脚本.
使用OpenCV的集合(cv2.CAP_PROP_EXPOSURE,20)会导致“VIDEOIO ERROR:V4L:属性暴露(15)不受设备支持”.我确定网络摄像头支持更改此属性,因为可以使用v4l2这样做,然后我认为问题在于OpenCV的包装器.
我还尝试使用子进程lib发送终端命令并使用v4l2更改属性.该命令是subprocess.call(‘v4l2-ctl –device = / dev / video0 –set-ctrl exposure_absolute = 20’,shell = True).
结果是exposure_absolute更改但它不适用于我当前的视频捕获.图1显示了通过脚本设置属性后的结果.图2显示了通过终端设置相同属性后的结果,同一视频捕获处于活动状态.
在图像1之后立即拍摄图像2,突出显示的线与图像1相同.
我在子进程调用上做错了吗?或者如何使用脚本更改此属性?
另外,为什么cv2.VideoCapture(id)重置了摄像机属性,在运行脚本之前更改它们是没有用的,是否可以阻止它?
__________________________________________________
编辑:我可能找到了解决此问题的方法.子进程调用确实是正确的,我只需要在更改属性之前使用cv2.read()一次,显然第一个cv2.read()是重置相机属性的地方.我仍然不知道如何阻止它自动重置网络摄像头的属性.