搜索
您的当前位置:首页正文

实验七、Linux V4L摄像头图片捕获实验

来源:哗拓教育

实验日期: 2024 年 11 月 12 日   报告退发 (订正 、 重做)                            

一、实验目的

1、掌握摄像头查看工具v4l2-ctl的使用 ;

2、掌握通过V4L2接口使用C代码读取usb摄像头图片的方法;

二、实验内容

1、启动嵌入式Linux开发宿主主机Ubuntu12.04, 使用root帐号登录;

2、配置Ubuntu12.04 Linux虚拟机连接上网,通过apt-get安装v4l-utils工具包,并测试图片显示工具display、gpicview图片查看工具命令的使用,如果缺少gpicview命令,可以通过apt安装gpicview包、

4、使用gcc编译v4l2-yuyv-nmap、v4l2-mjpeg-nmap两份代码,阅读并查看代码,使用代码比较软件”Beyond Compare”尝试比较两个代码的区别,了解V4L接口读取图片的两种不同格式代码的调用方法。

5、阅读并编译运行v4l2-yuyv-nmap代码,捕获一张YUYV格式图片,使用windows下的yuv图片查看工具yuvplayer.exe查看捕获后的YUYV图片。

6、阅读并编译运行v4l2-mjpeg-nmap代码,看能否正常捕获一张JPEG格式的图片,检查能否正常显示。

三、实验环境

安装有vmware软件的window主机,Ubuntu12.04 Linux虚拟机,USB摄像头一个。 

四、实验步骤

(描述实验步骤及中间的结果或现象。在实验中做了什么事情,怎么做的,发生的现象和中间结果)

1、启动嵌入式Linux开发宿主主机Ubuntu12.04, 使用root帐号登录;

1)、安装v4l2开发库

apt-get install libv4l-dev

apt-get install v4l-utils

apt-get install gpicview

apt-get install imagemagick

  1. 在Ubuntu12.04中,接入USB 接口的摄像头(Sony PS3 EYE或者罗技C270或者其他),执行dmesg、lsusb 、v4l2-ctl找出相关的摄像头硬件及其性能信息,在/dev/目录中找出对应的摄像头设备名。
    1. dmesg结果(部分截图):

    1. lsusb:
  1. 使用gcc编译v4l2-yuyv-nmap、v4l2-mjpeg-nmap两份代码,阅读并查看代码,使用代码比较软件”Beyond Compare”尝试比较两个代码的区别,了解V4L接口读取图片的两种不同格式代码的调用方法。

两段代码的主要区别:

  1. 像素格式设置:
  1. 在第一段代码(v4l2-mjpeg-nmap)中,像素格式被设置为V4L2_PIX_FMT_MJPEG,这意味着摄像头将以Motion JPEG格式输出图像。
  2. 在第二段代码(v4l2-yuyv-nmap)中,像素格式被设置为V4L2_PIX_FMT_YUYV,这是一个平面格式,其中YUV分量交错存储。
  1. 文件保存扩展名:
  1. 第一段代码保存的文件扩展名为.jpg,这与Motion JPEG格式相匹配。
  2. 第二段代码保存的文件扩展名为.yuyv,这与YUYV格式相匹配。

  1. 阅读并编译运行v4l2-yuyv-nmap代码,捕获一张YUYV格式图片,使用windows下的yuv图片查看工具yuvplayer.exe查看捕获后的YUYV图片。
    1. 编译运行v4l2-yuyv-nmap代码,捕获一张YUYV格式图片
    1. 使用windows下的yuv图片查看工具yuvplayer.exe查看捕获后的YUYV图片
      • 常规查看yuyv V4L抓取的图片,设置分辨率为640 480 ,格式选YUYV
  1. 阅读并编译运行v4l2-mjpeg-nmap代码,看能否正常捕获一张JPEG格式的图片,检查能否正常显示。
    1. 编译运行v4l2-mjpeg-nmap代码(见上题)
    2. 检查能否正常显示:不能,缺少Huffman编码表

五、实验结果与讨论

(描述最终得到的结果,并进行分析说明,可能的误差原因)

在本次Linux V4L摄像头图片捕获实验中,我们成功完成了以下目标:

  1. 工具掌握:我们熟练掌握了v4l2-ctl工具的使用,能够查询摄像头的硬件信息和性能参数。

  1. 软件安装:我们成功在Ubuntu 12.04虚拟机上安装了v4l-utils工具包和gpicview图片查看工具,这些工具对于摄像头操作和图片查看提供了便利。

  1. 摄像头识别:我们通过执行dmesg、lsusb和v4l2-ctl命令,成功识别了连接到Ubuntu系统的USB摄像头,并找到了对应的设备文件(如/dev/video0)。

  1. 代码编译与比较:我们使用gcc编译了v4l2-yuyv-nmap和v4l2-mjpeg-nmap两份代码,并使用Beyond Compare软件比较了两者的区别。我们发现主要区别在于像素格式的设置和文件保存的扩展名。

  1. YUYV格式图片捕获:我们成功运行v4l2-yuyv-nmap代码,捕获了YUYV格式的图片,并使用Windows下的yuvplayer.exe工具查看了捕获的图片,验证了代码的正确性。

  1. JPEG格式图片捕获:我们尝试运行v4l2-mjpeg-nmap代码捕获JPEG格式的图片,但发现无法正常显示。分析原因可能是缺少Huffman编码表,导致JPEG图片无法被标准图像查看器识别。
  2. 可能的误差原因:
    • JPEG格式问题:JPEG图片无法显示可能是由于摄像头输出的JPEG数据不完整或格式不正确,缺少必要的Huffman编码信息,导致图片无法被解码。
    • 摄像头驱动或兼容性问题:某些摄像头可能与V4L2接口的兼容性不佳,导致无法正确捕获或显示特定格式的图片。
    • 代码实现问题:代码中可能存在逻辑错误或对V4L2接口的使用不当,导致无法正确处理摄像头数据。

六、总结

(说明实验过程中遇到的问题及解决办法;新发现或个人的收获;未解决/需进一步研讨的问题或建议新实验方法等)

  1. 实验过程中遇到的问题及解决办法:

问题:JPEG图片无法正常显示。

解决办法:我们通过分析代码和查阅资料,发现问题可能出在Huffman编码上。我们计划进一步研究JPEG的编码原理,并尝试实现自己的JPEG解码器或者使用支持JPEG解码的库。

  1. 新发现或个人的收获:
  1. 学会了如何使用v4l2-ctl工具和如何通过V4L2接口编程捕获摄像头图片。
  2. 了解了YUYV和JPEG两种不同格式的图像捕获方法和区别。
  3. 学会了如何使用代码比较工具来分析和比较代码。

  1. 未解决/需进一步研讨的问题或建议新实验方法:
    • JPEG图片的Huffman编码问题需要进一步研究,以便能够正确捕获并显示JPEG格式的图片。
    • 可以考虑使用其他图像处理库,如OpenCV,来进行图像捕获和处理,可能会有更好的效果。
    • 对于JPEG图片的Huffman编码问题,可以深入研究JPEG的编码原理,并尝试实现自己的JPEG解码器。
    • 建议进行更多的实验,以测试不同摄像头和不同环境条件下的图像捕获效果,以便更好地理解V4L2接口和摄像头的工作机制。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top