我正在使用OpenCV 3.1和Python 2.7从我的网络摄像头Logitech C270捕获视频帧。我还使用video4linux2(v4l2)设置相机的属性,但这导致了一些问题。我的操作系统是Ubuntu 15.04。
我试图改变的特定属性是absolute_exposure。
我可以通过终端使用v4l2 API手动更改它,使用命令v4l2 ctl--set ctrl EXPORATION\u absolute=40
,它工作得很好,但我需要为此任务编写一个脚本。
使用OpenCV的设置(cv2.CAP\u PROP\u EXPOSURE,20)
会导致“VIDEOIO错误:V4L:设备不支持属性暴露(15)”。我确信网络摄像头支持此属性的更改,因为可以使用v4l2进行更改,那么我假设问题在于OpenCV的包装器。
我还尝试使用subprocesslib发送终端命令,并使用v4l2更改属性。该命令是子进程。调用('v4l2-ctl--device=/dev/video0--set ctrl exposure\u absolute=20',shell=True)
。
结果是exposure_absolute改变,但它不适用于我当前的视频捕获。图1显示了通过脚本设置属性后的结果。图2显示了通过终端设置相同属性后的结果,激活了相同的视频捕获。
通过脚本设置绝对曝光(图1)
通过终端设置exposure_absolute(图2)
图像2是在图像1之后拍摄的,突出显示的线条与图像1相同。
我在子进程调用上做错了什么吗?或者如何使用脚本更改此属性?
还有,为什么cv2。VideoCapture(id)
重置相机属性,在运行脚本之前更改它们是没有用的,是否可以停止?
__________________________________________________
编辑:我可能找到了解决这个问题的方法。子流程调用确实正确,我只需要使用cv2。在更改属性之前读取()
一次,显然是第一个cv2。read()
是重置相机属性的位置。但我仍然不知道如何阻止它自动重置网络摄像头的属性。
如果您使用GStreamer支持构建opencv(标志:-DWITH_GSTREAMER=ON),您可以使用GStreamer管道打开VideoCapture,您可以在其中指定v4l2的所有类型的参数:
std::string cameraPipeline;
cameraPipeline ="v4l2src device=/dev/video0 extra-controls=\"c,exposure_auto=1,exposure_absolute=500\" ! ";
cameraPipeline+="video/x-raw, format=BGR, framerate=30/1, width=(int)1280,height=(int)720 ! ";
cameraPipeline+="appsink";
VideoCapture cap;
cap.open(cameraPipeline);
这是用C和Python编写的。您可以通过在终端中键入以下命令来获得控件的完整列表:v4l2 ctl--list ctrls menus
我一直在开发一些视频应用程序使用USB网络摄像头和v4l2 API。该API提供了大量的ioctl()调用来枚举综合能力、视频标准、像素颜色格式等。但是没有ioctl()来列举USB网络摄像头支持的所有可能的图像大小。 这样做的首选方式是什么? API留档表示您可以设置特定的图像大小,ioctl()将返回最接近的匹配。所以我想我可以尝试所有可能的图像大小,看看USB网络摄像头是否拒绝它。但是,当有
Networking support 网络支持 Networking options CONFIG_NET 网络选项.systemd依赖于它 Packet socket CONFIG_PACKET 链路层PF_PACKET套接字支持.可以让应用程序(比如:抓包工具tcpdump,DHCP客户端dhclient,WiFi设置工具wpa_supplicant)直接与网络设备通讯,而无需使用内核中的其它
一面(电话面) 1基本情况 2家庭情况 有无女朋友 3想不起来了 二面(视频面) 1自我介绍 2问了几个网络相关知识(osi 动态路由) 3深挖简历社团经历 4问研究生建模大赛团队问题(自己扮演的角色,团队有没有矛盾如何处理的) 三面(视频面 1自我介绍 2 朋友眼中自己是什么样的人? 3如何学习的,学习方法 四面(电话面) 谈薪资 #中兴# 华为 #锐捷网络# 新华三#
我目前正在做一个项目,从网络摄像头捕捉视频,并通过UDP发送编码流来做实时流。 有人说从cap.read得到的帧已经是解码帧,我不知道这是如何以及何时发生的。我想要的是编码的帧或流。我应该怎么做才能得到它?我应该再编码一次吗?
问题内容: 我一直在尝试使用Python创建一个简单的程序,该程序使用OpenCV从我的网络摄像头获取视频供稿并将其显示在屏幕上。 我知道我之所以在这里,是因为创建了窗口,并且网络摄像头上的灯闪烁了,但是它似乎在窗口中什么都没有显示。希望有人可以解释我在做什么错。 在不相关的注释上,我注意到我的网络摄像头有时会在中更改其索引号,有时我需要输入0、1或2,即使我只连接了一个摄像头,也没有拔下插头(我
我需要有一个功能,告诉我是否手机的摄像头视频支持至少30fps。我同时使用camera1和camera2 api,这取决于手机对camera2的支持(或不支持) 我想用这个: 但我不确定这是否是正确的解决方案,我不明白我得到的范围,以及我是否选择了正确的摄像学。