我正在使用OpenCV编写Python程序,但我无法从v4l2相机中捕获图像。
我尝试使用PS2 EyeToy和Droidcam(Android虚拟网络摄像头),它们都使用v4l2,但都不起作用:cv.CaptureFromCAM(0)只返回None。
我可以在其他程序中使用两个网络摄像头(尝试过VLC和Kamerka)。
我想OpenCV仅支持v4l,而不支持v4l2。
我该如何解决这个问题?是否存在v4l2-> v4l转换器?
编辑:我读过cv.CaptureFromFile使用ffmpeg来解码视频文件。是否可以手动指定格式,所以我可以使用ffmpeg的video4linux2
分路器?
答案 0 :(得分:6)
对于OpenCV 3.2.0,包括以下cmake选项为我工作
来自https://github.com/opencv/opencv/issues/7974
-DWITH_V4L=ON
-DWITH_LIBV4L=ON
我不确定这个是否有影响,但来自VideoCapture Does Not Work in Anaconda
-DWITH_FFMPEG=1
在我的cmake选项中包括所有3个似乎是最终使我的工作
答案 1 :(得分:3)
OpenCV支持V4L2 ,但默认情况下可能不支持。
下载OpenCV的源代码,确保您的系统上安装了v4l2标头和库。
使用cmake
配置OpenCV后,检查它的输出:
-- Video I/O:
-- DC1394 1.x: NO
-- DC1394 2.x: YES (ver 2.2.0)
-- FFMPEG: YES
-- codec: YES (ver Unknown)
-- format: YES (ver Unknown)
-- util: YES (ver Unknown)
-- swscale: YES (ver Unknown)
-- gentoo-style: YES
-- OpenNI: NO
-- OpenNI PrimeSensor Modules: NO
-- PvAPI: NO
-- GigEVisionSDK: NO
-- QuickTime: NO
-- QTKit: YES
-- V4L/V4L2: NO/NO
如果您注意到上面的输出,OpenCV将不会在我的系统上支持V4L / V4L2而构建,因为我没有安装必要的开发文件。
答案 2 :(得分:0)
我必须更新摄像机的权限,然后OpenCV开始为我工作。
sudo chmod 0777 /dev/video0