设为首页 友情链接
在线留言 发表文章
加入收藏 广告联系

刺猬首页

| 专案技术 | 网络技术 | 图形图象 | 网络编程 | 网页设计 | 操作系统 | 服务器 | 技术白皮书 | 在线实验室 | 刺猬论坛 |
小说专版  | 数据库 | 设计赏析 | 存储频道 | 网络安全 | 私服架设 |  Solaris | 网站评估 | PC维护技巧 | 下载中心 | 博 客 |
专   题: | Linux | java | cisco | 防病毒 | 刀片 | SOA | iscsi | ASP.NET | SQL | Oracle |
您现在的位置: IT公社 IT community >> Linux专题 >> Linux应用技巧 >> 教程正文 用户登录 新用户注册
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
在Debian操作系统下如何…
如何在Linux系统使用红外…
如何手动设置修改X-Wind…
如何在Linux/FreeBSD下玩…
如何用cdma 1x手机连接L…
如何通过redhat CDROM制…
如何在Linux上建立DNS服…
Firewalking如何探测访问…
Linux网络环境下如何玩转…
如何判定你是否具备有学…
  如何利用Video4Linux获取摄像头数据         
如何利用Video4Linux获取摄像头数据
 

Video4Linux是Linux下用于获取视频和音频数据的API接口,在这篇文章中,着重阐述如何利用Video4Linux获取摄像头数据,以实现连续影像的播放。

1. 摄像头的安装

在Linux下常用的摄像头驱动是spca5xx, 这是一个通用驱动,读者可以在以下网站下到这个驱动 http://mxhaard.free.fr/download.html。这个网站还给出了这款驱动支持的摄像头的种类。另外,ov511芯片直接就支持Linux,使用者款芯片的摄像头有网眼V2000。我使用的是网眼V2000的摄像头,和Z-Star 301p+现代7131R芯片的摄像头。后一种需要spca5xx的驱动。关于spca5xx的安装方法,网上有很多介绍,这里就不说了。

2. 摄像头的调试

安装好摄像头后,为了测试摄像头能否正常工作,可以用一下软件。比较著名的是xawtv,在网上搜以下可以下载到。安装好后,打开xawtv则可以调试摄像头。

3. Video4Linux 编程获取数据

现有的video4linux有两个版本,v4l和v4l2。本文主要是关于v4l的编程。利用v4l API获取视频图像一般有以下几步:

a> 打开设备

b> 设置设备的属性,比如图像的亮度,对比度等等

c> 设定传输格式和传输方式

d> 开始传输数据,一般是一个循环,用以连续的传输数据

e> 关闭设备

下面具体介绍v4l编程的过程。首先指出,在video4linux编程时要包含头文件,其中包含了video4linux的数据结构和函数定义。

1)v4l的数据结构

在video4linux API中定义了如下数据结构,详细的数据结构定义可以参考v4l API的文档,这里就编程中经常使用的数据结构作出说明。

首先我们定义一个描述设备的数据结构,它包含了v4l中定义的所有数据结构:

typedef struct _v4ldevice

{int fd;//设备号

struct video_capability capability;

struct video_channel channel[10];

struct video_picture picture;

struct video_clip clip;

struct video_window window;

struct video_capture capture;

struct video_buffer buffer;

struct video_mmap mmap;

struct video_mbuf mbuf;

struct video_unit unit;

unsigned char *map;//mmap方式获取数据时,数据的首地址

pthread_mutex_t mutex;

int frame;

int framestat[2];

int overlay;

}v4ldevice;

下面解释上面这个数据结构中包含的数据结构,这些结构的定义都在中。

* struct video_capability

name[32] Canonical name for this interface 

type Type of interface 

channels Number of radio/tv channels if appropriate 

audios Number of audio devices if appropriate 

maxwidth Maximum capture width in pixels 

maxheight Maximum capture height in pixels 

minwidth Minimum capture width in pixels 

minheight Minimum capture height in pixels

这一个数据结构是包含了摄像头的属性,name是摄像头的名字,maxwidth maxheight是摄像头所能获取的最大图像大小,用像素作单位。

在程序中,通过ioctl函数的VIDIOCGCAP控制命令读写设备通道已获取这个结构,有关ioctl的使用,比较复杂,这里就不说了。下面列出获取这一数据结构的代码:

int v4lgetcapability(v4ldevice *vd)

{

if(ioctl(vd->fd, VIDIOCGCAP, &(vd->capability)) < 0) {

v4lperror("v4lopen:VIDIOCGCAP");

return -1;

}

return 0;

}

* struct video_picture 

brightness Picture brightness 

hue Picture hue (colour only) 

colour Picture colour (colour only) 

contrast Picture contrast 

whiteness The whiteness (greyscale only) 

depth The capture depth (may need to match the frame buffer depth) 

palette Reports the palette that should be used for this image

这个数据结构主要定义了图像的属性,诸如亮度,对比度,等等。这一结构的获取通过ioctl发出VIDIOCGPICT控制命令获取。

* struct video_mbuf 

size The number of bytes to map 

frames The number of frames 

offsets The offset of each frame
Linux联盟收集整理

频道声明:本频道的文章除部分特别声明禁止转载的专稿外,可以自由转载.但请务必注明出出处和原始作者 文章版权归本频道与文章作者所有.对于被频道转载文章的个人和网站,我们表示深深的谢意。

原始作者:佚名 录入时间:2007-1-3 3:48:54
信息来源:不详 投稿信箱:itqoo@126.com
教程录入:itqoo    责任编辑:itqoo 
  • 上一个教程:

  • 下一个教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    - 关于我们 - 合作伙伴 - 友情链接 - 广告刊登 - 投稿热线 - 在线留言版权声明联系方式 -
    IT公社版权所有 粤ICP备05127012号
    Copyrigh@2005-2006 itqoo.com.Inc All Rights Reserved  推荐分辨率 1024*768
    联系站长:E-Mail:itqoo@126.com     MSN:urchincc@hotmail.com    QQ:点击这里给我发消息
    特别感谢:亿太网络提供空间支持