基于delphi的摄像头软件控制设计内容摘要:
窗体,打开摄像头,获取视频句柄等相关数据,完成视频信息的初步采集。 关闭设备 断开系统与摄像头的链接,释放视频窗口和内存空间。 保存为 BMP 文件 实时拍摄,抓取瞬间图像 ,并 保存为 BMP文件。 开始录像 将视频捕获的图像信息保存为 avi 文件,录像过程完成音频文件( *.wav)的同步录制。 该模块分为短时录制和长时录制,短时录制的录制时间完全由用户控制。 长时录制时,当用户输入文件名后,在第一时间段内,程序将 以用户输入的文件名为主文件名自动保存,保存过程中一旦发现硬盘空间不足即停止录制,其后,每隔一小时系统自动存盘一次,并根据用户输入的文件名自动产生文件序号,作为新的 AVI 文件名进行保存。 停止录像 视频文件( *.avi)与音频文件 (*.wav)录制完成,释放缓存中的视频文件流。 复制到剪贴板 将实时抓取的瞬间图像送往剪贴板。 显示格式设置 设置视频信息的显示格式、图像大小等。 视频回放 对录制好的视频信息,用户可随时根据需要回放观看。 帮助系统 介绍系统 的帮助文件、版权信息等,以方便于用户使用该系统。 控制 的 具体 实现 视频捕获流程 ( 1)创建“捕获窗” 在进行视频捕获之前必需要先创建一个“捕获窗”,并应以此为基础进行所有的信息捕获及设置操作。 “捕获窗”可用 AVICap 窗口类的“ Cap Create Capture Window”函数来创建,在“捕获窗”的创建过程中,需指定捕捉窗口的名字、窗口风格、窗口左上角坐标、窗口的宽度和高度以及父窗口的句柄和该捕捉窗口的 ID 等信息。 “捕获窗”类似于标准控件,它的主要功能有: ① 动态地同视频和音频输入器件连接或断开; ② 对输入的视频流进行实时显示; ③ 在捕获时,可指定所用的文件名,并可将捕获文件的内容拷贝到另一个文件; ④ 设置捕获速率、捕获比例、显示格式等信息; ⑤ 显示控制视频源、视频格式及视频压缩的对话框; ( 2)建立捕获窗和驱动程序间的关联 单独定义的捕获窗是不能工作的,它必须与一个设备相关联才能取得视频信号。 用向 WINDOWS 发送 CapDriver Connect 函数消息,使捕获窗与其设备驱动程序相关联,以便捕获视频信息。 ( 3)设置视频设备的属性 通过设置 TcaptureParms 结构变量的各个成员变量,可以控制 设备的采样频率、中断采样按键、状态行为。 设置好 TcaptureParms 结构变量后,可以用函 数CapCaptureSetSetup 使设置生效。 之后还可以用 CapPreviewScale、 CapPreviewRate 设置预览的比例与速度,也可以直接使用设备的默认值。 ( 4)打开预览 当捕获窗和驱动程序建立关联之后,用 CapPreview 启动预览功能,这时就可以在屏幕上看到来自摄像机的图像了。 利用函数 CapOverlay 可选择是否采用叠加模式预览,以使系统资源占用小,视频显示速度加快。 通过以上四步就可以建立一 个基本的视频捕获程序,但如果想自己处理从设备捕获到的视频数据,则要使用捕获窗回调函数来处理,比如一帧一帧地获得视频数据或以流的方式获得视频数据等,因此,回调函数在视频捕捉设计中具有举足轻重的作用。 软件的实现 新建一个工程,并将 加入新建的工程中。 在工程的主窗体上放置所需的各种控件,并对各控件进行静态的属性设置,设计好的主窗体如图 41 所示: 为了程序的需要,首先在主窗口的 PUBLIC 部分定义一些相关变量: dc:HDC。 //定义显示设备 hdd:HDRAWDIB。 //设备无关位图格式 BmpInfo,BmpInfo1:BITMAPINFO。 //位图格式 hWndC : THandle。 //视频输出句 Data:PChar。 //存放视频输出数据的内存地址 图 41 主窗体 在 上面所定义的全局变量中,位图格式被定义为设备无关位图。 所谓设备无关位图是指 WINDOWS 可在任何类型的显示设备上显示所存储的图像, 以后的以 BMP 为扩展名的文件都是设备无关位图 (DIB)文件。 DIB 位图的存储特点为:①图像存储顺序是从左到右,从下到 上。 即存储的位图是显示的位图图像的倒置。 ②象素位数为 1 的 DIB 位图,每个字节存储 8个象素。 字节的最高位对应于最左边的象素。 ③象素位数为 4的 DIB 位图,每个字节存储 2个象素。 高 4位对应于最左边的象素。 ④象素位数为 24 的 DIB 位图,每个象素占三个字节,从左到右分别存储蓝、绿、红的颜色值 [10]。 DIB 文件由 4 个部分组成:位图文件头、位图信息头、颜色表和位图图像数据。 管 理 位 图 文 件 头 、 位 图 信 息 头 和 颜 色 表 的 3 个 结 构 分 别 为 BITMAPFILEHEADER、 BITMAPINFOHEADER 和 RGBQUAD。 其中 BITMAPINFOHEADER 和RGBQUAD 结构又通过 BITMAPINFO 来组合。 DIB 位图的信息头如表 所示: 表 BITMAPINFOHEADER 数据域含义 数据域参数 数据域含义 biSize 本结构大小的字节数 Width 位图的宽度、单位为 象 素点 Height 位图的高度、单位为 象 素点 数据域参数 数据域含义 Planes 指定设备所用的颜色位面数,位面数决定了设备所使用的颜色数, 2^位面数就是颜色数。 如:单色屏幕位面数为 1,颜色数=2^1=2, 16色屏幕颜色位面数为 4,即 2^4 BitCount 象素的位数 (如 1位位图 、 12位位图、 24位位图等 ) Compression 压缩方式 (0表示不压缩 ) SizeImage 位图数据的字节数 XPelsPerMeter 水平分辨率(象素点 /米) YPelsPerMeter 垂直分辨率(象素点 /米) Clrused 图像中使用的颜色数 ClrImportant 图像中重要的颜色数 虽然定义了位图格式,但要让捕获的图像能在视频窗口中正确显示出来,还必须保证该窗口的位图格式与视频所定义的位图格式一致。 其中,位图格式变量Bmpinfo1 用于输出显示,它用来保证这种一致性。 设计一个 SetBmpinfo1 过程来设置该位图变量的格式: procedure ()。 begin :=sizeof(BITMAPINFO)。 :=224。 :=224。 :=1。 :=12。 :=808596553。 :=60000。 :=224。 :=224。 :=0。 :=0。 end。 在窗口初始化过程中,需要用定义过的格式和结构对相关变量进行初始化,使绘图板和设备均处于打开状态,并提前为视频数据分配内存空间: procedure (Sender:TObject)。 begin setbmpinfo1()。 //设置显示位图的格式 dc:=getdc()。 //获取显示设备 hdd:=drawdibopen()。 //打开绘图板 if hdd=null then (39。 没 有绘图信息句柄 !39。 )。 getmem(data,440000)。 //分配用于存放视频数据的内存 end。 在窗口的关闭过程中,需要释放掉为视频数据分配的内存空间,如果视频设备和绘图板等设备没有关闭,则关闭相关设备,将设备与变量置于初始状态,为下次使用作好准备: procedure (Sender: TObject。 var Action: TCloseAction)。 begin if hwndc0 then begin sendmessage(hwndc,wm_cap_driver_disconnect,0,0)。 end。 freemem(data)。 //释放分配的内存 drawdibclose(hdd)。 //关闭已打开的设备 end。 启动摄像与音频录制 ( 1)启动摄像 要启动摄像头开始摄像,首先要引入一个外部函数capCreateCaptureWindowA[5],这个函数来自于 动态链接库中。 调用 capCreateCaptureWindowA 函数,就可以建立视频捕捉窗体,通过向视频捕捉窗体发送相应的消息函数,即可实现捕捉窗口与设备的关联、捕捉视频、设置视频的格式等操作。 具体响应代码如下: //以下为核心代码,用于产生视频窗口 hWndC := capCreateCaptureWindowA(39。 视频窗口 39。 ,WS_CHILD or WS_VISIBLE ,,Form1.Handle,0)。 if hWndC 0 then //视频窗口产生正常,初始化相关设备 begin SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0,0)。 SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0)。 SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0)。 SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0)。 SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0)。 SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 80, 0)。 SendMessage(hWndC,WM_CAP_SET_CALLBACK_FRAME,0,LongInt(@FrameCallBack))。基于delphi的摄像头软件控制设计
相关推荐
12 引脚 名称 描述 引脚 名称 描述 1 AGND 模拟地 11 OUTB 通道 2 输出 2 OUTA 通道 1 输出 12 RFTB 通道 2 反馈电压 3 RFBA 通道 1 反馈电压 13 REFB 通道 2 参考电压 4 REFA 通道 1 参考电压 14 VDD 驱动电压 5 DGND 数字地 15 WR 读写选通 6 A/B 通道 1, 2 选通 16 CS 片选 7 DB7
数模转换芯片采用的是 TLV 5608,实现滤波后的信号从数字信号恢复为所需要的模拟信号。 JTGA 口供 DSP 芯片下载程序调试。 TMS320C5402 的体系结构 TMS320VC5402 处理器在本系列中处于先进水平。 它具有运算速度快,内部存储空间大,外部接口性能好等优点。 所以我选择了技术上比较先进,价格又较便宜的 C5402 作为硬件开发对象。 下面结合 C5402 的实际情况
(E7) 当 n=N时,该滤波器的输出为 DFT在频率 Wk=2π k/N处的值,亦即 ( E8) 如同将( E5)与式( E6)相比较就可验证一样。 冲激响应为 hk(n)的滤波器,他的系数函数可表示为 1()11k kNHz Wz ( E9) 该滤波器在单位圆上的频率 Wk=2π k/N处有一个极点。 因此,通过将输入的数据组输入到 N个单极点并行滤波器(谐振器)组就 可计算整个
通 过 DDRAM 显 示在屏幕中。 ● 地址计数器 AC 地 址计数器 是用 来贮 存 DDRAM/CGRAM 之一的地址 ,它可由 设 定指令 缓 存器 来改 变 ,之后只要 读 取或是 写 入 DDRAM/CGRAM 的值 时 ,地 址计数器 的值就 会 自 动 加一, 当 RS 为 “ 0” 时 而 R/W 为 “ 1” 时 , 地址计数器 的值 会被读 取到 DB6—— DB0中。
晶振输入 3 X2 晶振输出 4 GND 地 5 RST 控制移位寄存器 /复位 6 I/O 数据输入 /输出 7 SCLK 串行时钟 8 VCC2 主电源输入 DS1302 读写和控制说明 DS1302 的数据读写方式有两种,一种是单字节操作方式,一种是多字节操作方式。 每次仅写入或读出一个字节数据称为单字节操作,每次对时钟 /日历的 8字节或 31 字节 RAM 进行全体写入或读出的操作
在高频系数为零的几率较大,因此,这种排序对于提高后面的熵编码的压缩效率非常有利。 直流分量的编码和解码对直流分量,并 不直接进行编码,而是利用差分编码的方法,对本块和前一块的直流分量之差 Diff DC I DC I1 , I 为块号 编码。 同时,由于亮度分量和灰度分量的统计特性不同,他们的 Haffman 编码也不相同,其码字结构为: 223 其中 4bit 二进制码“ SSSS”用来将