c920摄像头驱动 linux,获取新网络摄像头图像时的OpenCV VideoCapture / V4L2延迟

对于我正在处理的计算机视觉项目,我需要使用Logitech C920网络摄像头抓取图像 . 我正在使用OpenCV的VideoCapture来做到这一点,但我面临的问题是我在某个时刻拍摄的图像并没有显示相机看到的最新内容 . 也就是说,如果我在时间戳t拍摄一张图像,它会显示相机在时间戳(t-delta)处看到的内容,可以这么说 .

我这样做是通过编写一个程序来增加计数器并在屏幕上显示它 . 我将相机对准屏幕并让它记录下来 . 当计数器达到某个值(例如10000)时,它会抓取一个图像并用文件名“counter_value.png”(例如10000.png)保存 . 这样我就可以将计数器的当前值与摄像机看到的当前值进行比较 . 我注意到大多数时候延迟大约是4-5帧,但它不是固定值 .

我看到关于这个问题的类似帖子,但没有一个真的有帮助 . 有些人建议将帧抓取例程放入一个单独的线程中并更新“current_frame”Mat变量 . 我试过了,但由于某种原因,这个问题仍然存在 . 其他人提到相机在Windows上运行良好(但我需要使用Linux) . 我尝试在Windows上运行相同的代码,实际上延迟只有大约1帧(这可能是相机没有看到计数器,因为屏幕没有足够快地更新) .

然后我决定只运行一个基于V4L2代码的简单网络摄像头查看器,认为问题可能来自OpenCV . 我再次遇到了相同的延迟,这让我相信驱动程序正在使用某种缓冲区来缓存图像 .

我是V4L2的新手,我真的需要尽快解决这个问题,所以我对你们的问题是:

有没有人找到使用V4L2(也许是OpenCV)获取最新图像的解决方案?

如果使用V4L2无法解决问题,有没有人知道在Linux上修复此问题的另一种方法?

问候,

米哈伊

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果每次开机摄像头的顺序都会变化,而你又想通过 `/dev/video0` 来读取图像流,你可以尝试以下方法来解决这个问题: 1. 使用 `v4l2-ctl` 命令来查看摄像头设备的详细信息。运行以下命令来列出所有摄像头设备及其属性: ```bash v4l2-ctl --list-devices ``` 这将会显示类似以下的输出: ``` HD Pro Webcam C920 (usb-0000:00:14.0-1.4): /dev/video0 /dev/video1 Integrated Camera (usb-0000:00:14.0-8): /dev/video2 /dev/video3 ``` 通过比较摄像头的名称或其他属性,你可以确定每个摄像头设备的信息。 2. 创建一个脚本来动态地找到你想要的摄像头设备,并将其链接到 `/dev/video0`。例如,你可以使用一个类似以下内容的脚本: ```bash #!/bin/bash # Find the device path of the desired camera device_path=$(v4l2-ctl --list-devices | grep "HD Pro Webcam C920" | awk '{print $NF}') # Create a symbolic link to /dev/video0 ln -sf "$device_path" /dev/video0 ``` 将其中的 `"HD Pro Webcam C920"` 替换为你想要的摄像头设备的名称或其他标识符。 3. 将脚本保存为一个可执行文件,例如 `setup_camera.sh`。然后,将脚本添加到系统启动项,以在每次开机自动执行。 你可以通过编辑 `/etc/rc.local` 文件来添加启动项。在文件中添加以下内容: ```bash /path/to/setup_camera.sh & ``` 将 `/path/to/setup_camera.sh` 替换为你保存脚本的实际路径。 保存并关闭文件,然后重启动系统。脚本将在系统启动自动执行,并将正确的摄像头设备链接到 `/dev/video0`。 通过这种方法,你可以确保每次开机所需的摄像头设备都链接到 `/dev/video0`,以便你的程序可以始终使用相同的路径来读取图像流。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值