新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于S3C44B0开发板的图像采集方法研究

基于S3C44B0开发板的图像采集方法研究

作者:时间:2012-04-13来源:网络收藏


程序详细流程如下:

65.jpg

网眼V3000摄像头支持depth=24,palette=VIDEO_PALETTE_RGB24,输出图片为BMP格式,因此在程序中需要对BMP的格式进行定义。

BMP格式包括位图文件头:struct tatBITMAPFILEHEADER

位图信息头:struct tagBITMAPINFOHEADER

彩色表:struct tagRGBQUAD,

需要说明的是,BMP格式的数据阵列存储的扫描行是由下往上存储的,即第一个像素在左下角,最后一个像素在右上角,因此在读取的时候要注意。
(1)用read()方法获取图片,将图片数据直接读到用户内存空间,然后写入文件。
read(fd,data,size); //将fd所指位置size大小的数据读写到data内存空间
fwrite(bf,14,1,fp); //BMP文件头信息写入文件
fwrite(bi,40,1,fp); //BMP位图信息头信息写入文件
fwrite(buffer,ImageSize,1,fp); //图片写入文件

(2)用mmap()内存映射方法,需要ioctl(fd,VIDIOCGMBUF,mbuf)获取缓冲区的帧信息,调用mmap()函数把设备文件映射到内存区,这样就可以把读到的信息,读写到文件里。内存映射法加速了I/O的访问速度,它使得各进程指向一块共享内存空间,各进程可以随时进行访问,因此内存映射获取图片的方法速度要比read()方法快一些。
//设置水平和垂直分辨率及、彩色显示格式
vmmap.height=height;
vmmap.width=width;
vmmap.format=VIDEO_PALETTE_RGB24;
//调用mmap进行内存映射
buffer=mmap(0,buf.size,PORT_READ|PORT_WRITE,MAP_SHARD,fd,0);
picture.depth=24;
ioctl(fd,VIDIOCSPICT,picture)
//图像
if(ioctl(fd,VIDIOCMCAPTURE,vmmap)0)
{perror(VIDIOCMCAPTURE);
return 0;
}
//判断是否完成
if (ioctl(fd,VIDIOCSYNC,buf)0)
perror(VIDIOCSYNC);



评论


相关推荐

技术专区

关闭