Jetson TX1开发笔记(六):V4L2+OpenCV3.1以MJPG格式读取USB摄像头图像并实时显示

Stella981
• 阅读 1122

转载请注明作者和出处: http://blog.csdn.net/c406495762
嵌入式平台(Target): Jeston TX1
OpenCV: OpenCV3.1
摄像头: USB 800W摄像头

1 前言

    博主手中的800W高清摄像头:

Jetson TX1开发笔记(六):V4L2+OpenCV3.1以MJPG格式读取USB摄像头图像并实时显示

Jetson TX1开发笔记(六):V4L2+OpenCV3.1以MJPG格式读取USB摄像头图像并实时显示

    从上两幅图可以看出,该摄像头的YUV2输出格式只有一种640 x 480分辨率,而输出格式为MJPG有多种分辨率,如果想实现高清采集,需要通过MJPG格式进行采集。

    摄像头的输出格式可以是YUY2、MJPG等。对于输出格式为YUV2的摄像头,可以使用上个笔记中的nvcamerasrc,直接调用的是Gstreamer进行视频图像采集。而对于输出格式MJPG的摄像头,由于博主对Gstreamer不太了解,因此决定使用V4L2+OpenCV3.1进行图像采集。

2 预备知识

2.1 V4L2基础

    这部分的内容,可以看这位大牛的博客:http://www.cnblogs.com/surpassal/archive/2012/12/19/zed_webcam_lab1.html

    由于,采用MJPG采集格式,因此在V4L2设备初始化的时候,摄像头帧格式的pixelformat需要设置为V4L2_PIX_FMT_MJPEG:

Jetson TX1开发笔记(六):V4L2+OpenCV3.1以MJPG格式读取USB摄像头图像并实时显示

2.2 OpenCV图像解码

    可以使用cvDecodeImage进行图像解码,buf是保存图像的buffer。iscolor参数为0,解码成灰度图,参数为1,解码成彩色图。此处iscolor参数,我们设置为1。

Jetson TX1开发笔记(六):V4L2+OpenCV3.1以MJPG格式读取USB摄像头图像并实时显示

    代码如下:

Jetson TX1开发笔记(六):V4L2+OpenCV3.1以MJPG格式读取USB摄像头图像并实时显示

3 编译程序

3.1 整体代码

    由于代码较长,贴出来影响美观。可以在我的Github下载整体代码:

    URL:https://github.com/Jack-Cherish/VideoCapture/blob/master/capture.cpp

    欢迎follow、star!

3.2 编译及运行

    运行环境需要配置好OpenCV3.1,配置教程详见:http://blog.csdn.net/c406495762/article/details/72302980

    在~/.bashrc最后添加环境变量(我的OpenCV3.1安装在了/home/ubuntu/opencv-3.1.0下,这里需要改为自己的OpenCV3.1的路径):

export LD_LIBRARY_PATH=/home/ubuntu/opencv-3.1.0/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/home/ubuntu/opencv-3.1.0/lib/pkgconfig:$PKG_CONFIG_PATH

    使添加的环境变量生效:

source ~/.bashrc

    将程序拷贝到TX1中,使用使用如下指令编译(我的OpenCV3.1安装在了/home/ubuntu/opencv-3.1.0下,这里需要 改为自己的OpenCV3.1的路径) :

g++ -o capture -I /home/ubuntu/opencv-3.1.0/include -O2 -g -Wall capture.cpp -L /home/ubuntu/opencv-3.1.0/lib -lopencv_core -lopencv_imgproc -l opencv_flann -l opencv_imgcodecs -lopencv_videoio -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_objdetect -lopencv_photo -lopencv_features2d -lopencv_calib3d -lopencv_stitching -lopencv_videostab -lopencv_shape -lopencv_cudaobjdetect -lopencv_cudawarping -lopencv_cudaimgproc

4 运行结果

video dev : /dev/video0
Driver Name:uvcvideo
Card Name:RecordexUSA
Bus info:usb-tegra-xhci-3.3
Driver Version:3.10.96
Support format:
    1.YUV 4:2:2 (YUYV)
    2.MJPEG
Default rec:
    left:0
    top:0
    width:1920
    height:1080
Current data format information:
    width:1920
    height:1080
Used time is 185.864 ms
Used time is 56.2118 ms
Used time is 17.0305 ms
Used time is 14.5383 ms
Used time is 43.1591 ms
Used time is 32.4903 ms
Used time is 28.6098 ms
Used time is 20.398 ms
Used time is 33.6233 ms
Used time is 23.8306 ms

5 总结

    如有更好的方法欢迎留言讨论,谢谢!

    PS: 如果觉得本篇本章对您有所帮助,欢迎关注、评论、顶!

本文同步分享在 博客“Jack-Cui”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
P2P技术揭秘.P2P网络技术原理与典型系统开发
Modular.Java(2009.06)\.Craig.Walls.文字版.pdf:http://www.t00y.com/file/59501950(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.t00y.com%2Ffile%2F59501950)\More.E
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Stella981 Stella981
2年前
C++笔记002:VS2010报错:LINK fatal error LNK1123 转换到 COFF 期间失败文件无效或损坏
 原创笔记,转载请注明出处!点击【关注】,关注也是一种美德~错误描述:1已启动生成:项目:FirstCode,配置:DebugWin321生成启动时间为2018/2/521:00:30。1InitializeBuildStatus:1 正在
Python进阶者 Python进阶者
4个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这