您的位置:首页 > 运维架构 > Linux

video4linux(v4l)使用摄像头的实例基础教程与体会(五)

2009-10-08 14:28 375 查看
2 上述v4l库使用的方法
给出了上述的一些代码,这里用一些简单的代码表明如何来使用它。上文中已经说过将相关结构体和函数的定义放到一个名为v4l.h的文件中,相关函数的编写放在一个名为v4l.c的文件。
现在我们要使用它们。
使用的方法很简单,你创建一个.c文件,假设叫test.c吧,那么test.c如下
//test.c
include “v4l.h”
...
v4l_device vd;

void main()
{
v4l_open(DEFAULT_DEVICE,&vd);
v4l_mmap_init(&vd);
v4l_grab_init(&vd,320,240);
v4l_grab_sync(&vd);//此时就已经获得了一帧的图像,存在vd.map中
while(1)
{
vd.frame_current ^= 1;
v4l_grab_frame(&vd, vd.frame_current);
v4l_grab_sync(&vd);
图像处理函数(vd.map+vd. vd.map+vd.mbuf.offsets[vd.frame_current]);
//循环采集,调用你设计的图像处理函数来处理图像
//其中vd.map+vd. vd.map+vd.mbuf.offsets[vd.frame_current]就是图像所在位置。
}
}

3 有关获取的图像的一些问题
:我获取到的图像究竟长什么样?
:每个摄像头获取的图像数据的格式可能都不尽相同,可以通过picture. palette获得。获得的图像有黑白的,有yuv格式的,RGB格式的,也有直接为jpeg格式的。你要根据实际情况,和你的需要对图像进行处理。比如常见的,如果你要在嵌入式的LCD上显示假设LCD是RGB24的,但是你获得图像是YUV格式的那么你就将他转换为RGB24的。具体的转换方法可以上网查找,也可参考前面提到过的effectTV中的相关代码。

:如何显示图像或将图像保存?
:假设你采集到的图像为RGB24格式的,我接触过的可以使用SDL库显示(网络上很流行的叫spcaview的软件就是这样的,不过它将图像数据压缩为jpeg的格式后显示,这个软件也被经常的移植到一些嵌入式平台使用,如ARM的)。当然也可以使用嵌入式linux的Framebuffer直接写屏显示。将图像保存可以用libjpeg将其保存为jpeg图片直接存储,相关的使用方法可以上网查找。也可以使用一些视频编码,将其编码保存(我希望学习一下相关的技术因为我对这方面一点不懂,如果你有一些资料可以推荐给我看,我十分想看一看)。

一边写文章一边才发现自己很菜,因为很多都是参考别人的文章,而自己想写出来去一落键盘就写不出什么。就写这么多,因为我只会这么多。高手见笑,新手和我一样我们互相讨论
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: