一个基于opencv的C++程序解释

[复制链接]
查看2330 | 回复0 | 2010-3-28 09:38:00 | 显示全部楼层 |阅读模式
int main( int argc, char** argv ) { //======================================================== // CvCapture 是一个结构体,用来保存图像捕获所需要的信息。 // opencv提供两种方式从外部捕获图像,一种是从摄像头中,一种 // 是通过解码视频得到图像。两种方式都必须从第一帧开始一帧一帧 // 的按顺序获取,因此每获取一帧后都要保存相应的状态和参数。 // 比如从视频文件中获取,需要保存视频文件的文件名,相应的解码器 // 类型,下一次如果要获取将需要解码哪一帧等。 这些信息都保存在 // CvCapture结构中,每获取一帧后,这些信息都将被更新,获取下一帧 // 需要将新信息传给获取的api接口 //======================================================= CvCapture* capture = 0; //=========================================================== // IplImage 是结构体类型,用来保存一帧图像的信息,也就是一帧 // 图像的所有像素值构成的一个矩阵 //=========================================================== IplImage *frame, *frame_copy = 0; // 创建一个窗口,用“result”作为窗口的标识符 cvNamedWindow( "result", 1 ); // ========================================== // 初始化一个视频捕获操作。 // 告诉底层的捕获api我想从 Capture1.avi中捕获图片, // 底层api将检测并选择相应的解码器并做好准备工作 //============================================== capture = cvCaptureFromFile("c:\\Capture1.avi") // 如果 初始化失败,那么capture为空指针,程序停止, // 否则进入捕获循环 if( capture ) { // 捕获循环 for(;;) { // 调用cvGrabFrame,让底层api解码一帧图像 // 如果解码失败,就退出循环 // 如果成功,解码的图像保存在底层api的缓存中 if( !cvGrabFrame( capture )) break; // 将解码得到图像信息从缓存中转换成IplImage格式放在frame中 frame = cvRetrieveFrame( capture ); // 如果获取缓存或转换失败,则退出循环 if( !frame ) break; // 将frame中的图像信息在窗口result中显示 cvShowImage( "result", frame ); // 暂停一会儿,让你看一下图像 Sleep(66.9); // 如果你敲了键盘,就退出程序,否则继续捕获下一帧 if( cvWaitKey( 10 ) >= 0 ) break; } // 退出程序之前要清理一下堆栈中的内存,免得内存泄露 cvReleaseImage( &frame_copy ); // 退出之前结束底层api的捕获操作,免得它们占着茅坑不拉屎 // 比如会使得别的程序无法访问已经被它们打开的文件 cvReleaseCapture( &capture ); } cvDestroyWindow("result"); return 0; }
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则