#include "highgui.h"
#include #include #include #include #include #include #include #include #include #ifdef _EiC #define WIN32 #endif int main( int argc, char** argv ) { CvCapture*capture=0; IplImage *frame, *frame_copy = 0; cvNamedWindow( "result capture = cvCaptureFromFile("c:\\\\Capture1.avi") if( capture ) { for(;;) { if( !cvGrabFrame( capture )) break; frame = cvRetrieveFrame( capture ); if( !frame ) break; cvShowImage( "result Sleep(66.9); if( cvWaitKey( 10 ) >= 0 ) break; } cvReleaseImage( &frame_copy ); cvReleaseCapture( &capture ); } cvDestroyWindow("result"); return 0; } { //======================================================== // //CvCapture 是一个结构体,用来保存图像捕获所需要的信息。 // opencv提供两种方式从外部捕获图像,一种是从摄像头中,一种 // 是通过解码视频得到图像。两种方式都必须从第一帧开始一帧一帧 // 的按顺序获取,因此每获取一帧后都要保存相应的状态和参数。 // 比如从视频文件中获取,需要保存视频文件的文件名,相应的解码器 // 类型,下一次如果要获取将需要解码哪一帧等。这些信息都保存在 // CvCapture结构中,每获取一帧后,这些信息都将被更新,获取下一帧 // 需要将新信息传给获取的api接口//======================================================= CvCapture*capture=0; //=========================================================== // IplImage 是结构体类型,用来保存一帧图像的信息,也就是一帧 // 图像的所有像素值构成的一个矩阵 //=========================================================== IplImage *frame, *frame_copy = 0; // 创建一个窗口,用“result”作为窗口的标识符 cvNamedWindow("result // 初始化一个视频捕获操作。 // 告诉底层的捕获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 // 暂停一会儿,让你看一下图像 Sleep(66.9); // 如果你敲了键盘,就退出程序,否则继续捕获下一帧 if( cvWaitKey( 10 ) >= 0 ) break; } //退出程序之前要清理一下堆栈中的内存,免得内存泄露 cvReleaseImage( &frame_copy ); // 退出之前结束底层api的捕获操作,免得它们占着茅坑不拉屎 // 比如会使得别的程序无法访问已经被它们打开的文件 cvReleaseCapture( &capture ); } cvDestroyWindow("result"); return 0; }下载本文