DSP嵌入式视频监测
时间:06-02
来源:作者:常丹华 贺树猛
点击:
2.3 系统应用软件设计
本系统的应用软件设计分为图像采集设备初始化、数据格式转化和图像的捕捉三部分。视频图像采集的程序流程图如图3。
2.3.1 图像采集设备初始化
对于uClinux操作系统,它将设备看作文件,因此,想对设备进行读写等操作,应首先打开设备,完成操作后再关闭设备。设备文件的初始化主要针对PPI的/dev/ppifcd设备。本系统可以从4个步骤进行。
(1)打开视频设备 利用open()函数实现打开PPI视频设备。
fd_ppi=open("/dev/ppifcd",O_RDWR)
fd_ppi为设备文件描述符。
(2)获取设备信息 利用相应的ioctl()函数取得设备文件的相关信息,包含设备的基本信息参数(设备名称、支持的最大最小分辨率、信号源信息等);
ioctl(fd_ppi,CMD_PPI_GET_VIDEOIN,&video_in)
(3)获取影像信息 利用相应的ioctl()函数取得影像支持信息,包含设备采集图像的各种属性参数(色调、亮度、饱和度、对比度、色相等);
ioctl(fd_ppi,CMD_PPI_SET_0V7660,&pictures)
(4)关闭视频设备利用close()函数关闭PPI视频设备。
if(fd_ppi)close(fd_ppi);
2.3.2 数据格式的转化
本系统开始采集摄像头数据,将数据转化为YUV420格式,在PC上显示的时候采用的是RGB565格式,因此在采集完毕之后必须进行图像数据的格式转换。
RGB与YUV之间可以相互转化,对应关系如下:
其反变化公式如下
根据上述关系可以通过编程实现数据格式的转化。
2.3.3 图像的捕捉
在PPI_ov7660中采用直接读取的方法,直接读取方法比较简单,通过调用read()函数,将输入的图像数据复制到内核缓冲区中,就可以实现对每帧图像的读取。过程如下:
(1)通过调用函数malloc()为采集的图像数据分配内存;
in_buff=(unsigned char*)malloc(IMG_SIZE)
(2)通过调用read()函数将前端采集的图像数据读到in_buf中;
Fd=read(fd_ppi,in_buff,IMG_SIZE)
(3)通过调用write()函数将内存中的图像数据写到创建的一个file里。
fd=fopen("pic","wb")fwrite(in_buff,l,nOutputBytes,fd)
3 图像的网络传输与显示
在uClinux平台上采用服务器/客户端模型通过建立TCP套接字来实现网络的连接,本系统通过基于TCP协议的socket编程,完成了图像数据的发送和客户端的接收程序。流程图如图4所示。
以网络上PC机为客户端,用VC编写图像显示界面。把服务端采集的图像传送至接收端,如图5所示。实验表明,系统每秒采集15帧图像,没有停顿感,满足实时性要求。
本系统以B1ackfin533为数据处理核心,依托数字图像处理技术和DMA技术,并通过以太网与上位机通信进行数据传输,完成了一个完整的视频监测系统。其设计特点为结构简单、体积小、功耗低、图像分辨率高、成本低廉、结合网络布线。本系统满足实时行要求,具有很大的应用前景。
本系统的应用软件设计分为图像采集设备初始化、数据格式转化和图像的捕捉三部分。视频图像采集的程序流程图如图3。
2.3.1 图像采集设备初始化
对于uClinux操作系统,它将设备看作文件,因此,想对设备进行读写等操作,应首先打开设备,完成操作后再关闭设备。设备文件的初始化主要针对PPI的/dev/ppifcd设备。本系统可以从4个步骤进行。
(1)打开视频设备 利用open()函数实现打开PPI视频设备。
fd_ppi=open("/dev/ppifcd",O_RDWR)
fd_ppi为设备文件描述符。
(2)获取设备信息 利用相应的ioctl()函数取得设备文件的相关信息,包含设备的基本信息参数(设备名称、支持的最大最小分辨率、信号源信息等);
ioctl(fd_ppi,CMD_PPI_GET_VIDEOIN,&video_in)
(3)获取影像信息 利用相应的ioctl()函数取得影像支持信息,包含设备采集图像的各种属性参数(色调、亮度、饱和度、对比度、色相等);
ioctl(fd_ppi,CMD_PPI_SET_0V7660,&pictures)
(4)关闭视频设备利用close()函数关闭PPI视频设备。
if(fd_ppi)close(fd_ppi);
2.3.2 数据格式的转化
本系统开始采集摄像头数据,将数据转化为YUV420格式,在PC上显示的时候采用的是RGB565格式,因此在采集完毕之后必须进行图像数据的格式转换。
RGB与YUV之间可以相互转化,对应关系如下:
其反变化公式如下
根据上述关系可以通过编程实现数据格式的转化。
2.3.3 图像的捕捉
在PPI_ov7660中采用直接读取的方法,直接读取方法比较简单,通过调用read()函数,将输入的图像数据复制到内核缓冲区中,就可以实现对每帧图像的读取。过程如下:
(1)通过调用函数malloc()为采集的图像数据分配内存;
in_buff=(unsigned char*)malloc(IMG_SIZE)
(2)通过调用read()函数将前端采集的图像数据读到in_buf中;
Fd=read(fd_ppi,in_buff,IMG_SIZE)
(3)通过调用write()函数将内存中的图像数据写到创建的一个file里。
fd=fopen("pic","wb")fwrite(in_buff,l,nOutputBytes,fd)
3 图像的网络传输与显示
在uClinux平台上采用服务器/客户端模型通过建立TCP套接字来实现网络的连接,本系统通过基于TCP协议的socket编程,完成了图像数据的发送和客户端的接收程序。流程图如图4所示。
以网络上PC机为客户端,用VC编写图像显示界面。把服务端采集的图像传送至接收端,如图5所示。实验表明,系统每秒采集15帧图像,没有停顿感,满足实时性要求。
本系统以B1ackfin533为数据处理核心,依托数字图像处理技术和DMA技术,并通过以太网与上位机通信进行数据传输,完成了一个完整的视频监测系统。其设计特点为结构简单、体积小、功耗低、图像分辨率高、成本低廉、结合网络布线。本系统满足实时行要求,具有很大的应用前景。
DSP 嵌入式 视频监测 B1ackfin533 DMA 相关文章:
- 在采用FPGA设计DSP系统中仿真的重要性 (06-21)
- 基于 DSP Builder的FIR滤波器的设计与实现(06-21)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- FPGA的DSP性能揭秘(06-16)
- 用CPLD实现DSP与PLX9054之间的连接(07-23)
- DSP+FPGA结构在雷达模拟系统中的应用(01-02)