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

来源:互联网 发布:php sql 防注入 编辑:程序博客网 时间:2024/05/20 12:51

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上显示假设LCDRGB24的,但是你获得图像是YUV格式的那么你就将他转换为RGB24的。具体的转换方法可以上网查找,也可参考前面提到过的effectTV中的相关代码。

 

:如何显示图像或将图像保存?

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

 

       一边写文章一边才发现自己很菜,因为很多都是参考别人的文章,而自己想写出来去一落键盘就写不出什么。就写这么多,因为我只会这么多。高手见笑,新手和我一样我们互相讨论

原创粉丝点击