从摄像机读入数据
在计算机世界里,"视觉"这个词的含义非常丰富。在一些情况下,我们要分析从其他地方载入的固定图像。在另外一些情况下,我们要分析从磁盘中读入的视频文件。在更多的情况下,我们想处理从某些摄像设备中实时读入的视频流。
OpenCV-- 更确切地说,OpenCV中的HighGUI模块-- 为我们提供了一种简单的方式来处理这种情况。这种方法类似于读取AVI文件,不同的是,我们调用的是cvCreateCameraCapture(),而不是cvCreateFileCapture()。后面一个函数参数为摄像设备ID而不是文件名。当然,只有存在多个摄像设备时这个参数才起作用。默认值为-1,代表"随机选择一个";自然,它更适合当有且仅有一个摄像设备的情况(详细内容参考第4章)。
函数cvCreateCameraCapture()同样返回相同的CvCapture*指针,这使得我们后面可以使用完全类似于从视频流中获取帧的方法。当然,HighGUI做很多工作才使得摄像机图像序列看起来像一个视频文件,但是我们不需要考虑那些问题。当我们需要处理摄像机图像序列时我们只需要简单地从摄像机获得图像,像视频文件一样处理。为了便于开发工作,大多程序实时处理的程序同样会有视频文件读入模式,CvCapture结构的通用性使得这非常容易实现。具体如例2-9所示。 【26】
例2-9:capture结构初始化后,从视频文件或摄像设备读入图像没有区别CvCapture* capture;
if(argc==1 ) {
capture=cvCreateCameraCapture(0);
} else {
capture=cvCreateFileCapture( argv[1] );
}
assert( capture != NULL );
// Rest of program proceeds totally ignorant
...由此可见,这种处理是很理想的。
【责任编辑:云霞 TEL:(010)68476606】
点赞 0