- 转载请注明作者和出处:http://blog.csdn.net/u011475210
- 嵌入式平台:NVIDIA Jetson TX1
- 嵌入式系统:Ubuntu16.04
- 虚拟机系统:Ubuntu14.04
- 编者: WordZzzz
写在前面:
NVIDIA Jetson TX1开发套件包括一个CSI接口的500W摄像头,其官方多媒体例程基于此摄像头详细介绍了图像采集与编解码的种种操作。整个多媒体例程是基于gstreamer框架来写的,如果大家只是想把摄像头用起来,大可不必研究gstreamer框架,直接看接口就行。
由于项目需求,考虑到接线问题,我们放弃了CSI接口的摄像头,转而采用USB摄像头。而且最新的官方例程已经给出了基于V4L2的USB摄像头图像采集与编码例程。(12_camera_v4l2_cuda_video_encode)。
本博客将介绍三种在TX1上实现USB摄像头图像采集与显示的方法,分别基于gstreamer、ffmpeg和V4L2来实现USB摄像头的图像实时采集与显示。博主在项目中实现拍照和预览模式切换,最终采用的是V4L2+OpenCV2.4.13的方案,因为博主对V4L2比较熟悉,而对于gstreamer和ffmpeg只接触到了皮毛,对其理解也不是很到位。
注意:博主所用的USB摄像头输出图像格式为mjpeg,所以所有的程序中都是以jpeg为例进行编写的,如果想改成YUYV格式的,只需要改一下format设置,并把相应的解码程序去掉即可。
一、Gstreamer:
博主只是直接把测试好的gstreamer命令行写入到程序中,并不能对数据流做更多的操作,在多次尝试无果后放弃······
1 | /* |
二、Ffmpeg:
ffmpeg程序参考雷神博客,并在其基础上进行修改,ffmpeg编解码+SDL多线程定时刷新显示,程序详解还是看雷神的吧,打开传送门:http://blog.csdn.net/leixiaohua1020/article/details/38868499
1 | /* |
三、V4L2+OpenCV2.4.13:
这里贴出自己的代码,其中V4L2各功能函数是按照标准的V4L2框架进行编写的。本篇博客只贴出摄像头图像采集程序代码,下一篇将针对拍照+预览程序进行代码讲解:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37/*
* include.h
*
* Created on: Jul 26, 2017
* Author: wordzzzz
*/
#ifndef INCLUDE_H_
#define INCLUDE_H_
extern "C" {
#include <unistd.h>
#include <error.h>
#include <fcntl.h>
#include <pthread.h>
#include <termios.h>
#include <linux/videodev2.h>
#include <sys/mman.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
}
#include <iostream>
#include <iomanip>
#include <string>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
#endif /* INCLUDE_H_ */
1 | /* |
1 | /* |
1 | /* |
系列教程持续发布中,欢迎订阅、关注、收藏、评论、点赞哦~~( ̄▽ ̄~)~
完的汪(∪。∪)。。。zzz