从linux中的网络摄像头捕获图像

时间:2013-09-17 18:50:12

标签: linux

我想通过linux中的网络摄像头捕获图像。 所以我在互联网上搜索并发现它可以使用mplayer或vlc完成。

以下是mplayer捕获图像的命令及其相应的错误。

[root@localhost ~]# mplayer -vo png -frames 1 tv://

MPlayer SVN-r31628-4.4.4 (C) 2000-2010 MPlayer Team
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.

Playing tv://.
TV file format detected.
Selected driver: v4l2
 name: Video 4 Linux 2 input
 author: Martin Olschewski <olschewski@zpr.uni-koeln.de>
 comment: first try, more to come ;-)
v4l2: unable to open '/dev/video0': No such file or directory
v4l2: ioctl set mute failed: Bad file descriptor
v4l2: 0 frames successfully processed, 0 frames dropped.


Exiting... (End of file)
[root@localhost ~]# 

请帮我解决此错误。 我在网上搜索并发现了关于v4l2,但仍然无法解决问题。

3 个答案:

答案 0 :(得分:2)

你的错误非常清楚。网络摄像头显然没有在/ dev / video0注册。在某些情况下,我发现编码器或其他视频设备在/ dev / videoX下注册,其中X可以是任何整数。尝试修改您的语句以尝试不同的视频设备。

答案 1 :(得分:0)

您也可以尝试使用fswebcam,它具有跳过前几帧的有用功能 - 某些网络摄像头显示第一帧或第二帧的损坏(或绿色)图像:

fswebcam --skip 2 

可以将其设置为每秒捕获一次图像:

fswebcam --skip 2 --loop 1

答案 2 :(得分:0)

我是这样做的:

mplayer tv:// -tv driver=v4l2:device=/dev/video0 -fps 1 -frames 2 -sstep 100 -vo jpeg; rm 00000001.jpg ; mv 00000002.jpg capture.$(date +%F_%R).jpg

其中:

tv:// -tv driver=v4l2:device=/dev/video0”指定必需的驱动程序和视频设备。您需要执行ls /dev/video*,以检查该设备是您要捕获的设备还是存在的设备。

-fps 1 -frames 2 -sstep 100指定帧率,并且设置为每秒一帧,以确保您有足够的时间正确唤醒相机,捕获2帧,并且在帧之间,您的输出下降了100 fps,以帮助相机对焦。

-vo jpeg代表jpg输出格式的图像,在我的计算机上png不适用于所有这种配置。

rm 00000001.jpg删除第一帧图像,因为它总是模糊不清,呈绿色或没有聚焦,这是由于相机需要少量时间才能唤醒。

mv 00000002.jpg capture.$(date +%F_%R).jpg从00000002.jpg中获取第二帧图像开关名称为“捕获”。加上当前日期时间。