3

我正在使用 OpenCV 编写 Python 程序,但无法从 v4l2 相机捕获图像。

我尝试了 PS2 EyeToy 和 Droidcam(Android 虚拟网络摄像头),它们都使用 v4l2,但它们都不起作用:cv.CaptureFromCAM(0) 只返回 None。

我可以在其他程序中使用这两个网络摄像头(尝试过 VLC 和 Kamerka)。

我猜 OpenCV 只支持 v4l,不支持 v4l2。

我怎么解决这个问题?是否存在 v4l2->v4l 转换器?

编辑:我读到 cv.CaptureFromFile 使用 ffmpeg 解码视频文件。是否可以手动指定格式,以便我可以使用 ffmpeg 的video4linux2demuxer?

4

3 回答 3

7

对于 OpenCV 3.2.0,在 cmake 选项中包括以下内容对我有用

来自https://github.com/opencv/opencv/issues/7974

-DWITH_V4L=ON 
-DWITH_LIBV4L=ON

我不太确定这个是否有影响,但来自VideoCapture 在 Anaconda 中不起作用

-DWITH_FFMPEG=1

在我的 cmake 选项中包括所有 3 个似乎是最终使我工作的原因

于 2017-06-18T05:14:32.160 回答
3

OpenCV 确实支持 V4L2,但默认情况下可能不支持。

下载 OpenCV 的源代码并确保您的系统上安装了 v4l2 头文件和库

用 配置 OpenCV 后cmake,检查它的输出:

--   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

如果您注意到上面的输出,那么在我的系统上将不会在支持 V4L/V4L2 的情况下构建 OpenCV,因为我没有安装必要的开发文件。

于 2013-03-15T20:01:26.200 回答
-1

我必须更新相机的权限,然后 OpenCV 开始为我工作。

sudo chmod 0777 /dev/video0
于 2020-03-06T18:25:00.890 回答