视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
基于OPenCV的视频读取文件
2025-10-02 04:43:26 责编:小OO
文档
#include "cv.h"

#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;

}下载本文

显示全文
专题