Legend Since 1984
Cruising between Fantasy and Reality...

Monday, January 15, 2007

Camera Video Capture on Win32

Windows是基于事件和消息的,这一点在对摄像头数据的获取上体现得淋漓尽致。

  1. 启动和初始化摄像头设备。Win32下标准的方法是向设备驱动程序发送消息来实现的。具体的消息查阅MSDN Platform SDK可知:首先为视频捕捉创建一个窗口类(window class),接着向这个窗口类的句柄发送相应的消息来完成各项任务。比如发送消息WM_CAP_DRIVER_CONNECT就能连接摄像头驱动(即启动设备)。对于设备参数的初始化,比如设定每秒的帧数、获取设备驱动的名字都可以通过发送相应的消息来实现。具体的可以查询MSDN。
  2. 设定回调函数。在初始化的过程中有一项工作比不可少,那就是设定回调函数。这个回调函数类似于Windows窗体的回调函数,当每一帧数据获得后,由操作系统自动调用。在这个函数中可以处理每一帧的画面。这个函数之所以重要是因为它给实时的唇动跟踪提供了入口。我们通过处理每一帧的图像,计算出唇的位置,然后返回跟踪的结果用于显示。同时,如果获取的数据如果是经过压缩的,回调函数可以处理。处理后的结果存入一个CvvImage的变量中用于窗口显示。最后,回调函数将使窗口区域无效(重绘窗口)。
  3. 重绘窗口。回调函数使窗口无效后窗口会收到一个WM_PAINT消息。这样在其消息处理函数中的case WM_PAINT部分来对视频数据进行显示。由于回调函数之前把图像数据存入了一个CvvImage的变量中,如果不需要额外的处理的话,直接将这个变量的内容输出到显示器中即可。

通过以上几个简单的步骤,实现了获取摄像头数据并显示在Win32窗体中的功能。

Labels:

0 Comments:

Post a Comment

<< Home