opencv读取视频文件并显示的程序详细解释
2010-09-15 17:09
471 查看
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 );注意不需要这句,因为frame是从视频中捕获的,没有单独分配内存,无需释放,当capture 释放的时候frame自然就释放了。
// 退出之前结束底层api的捕获操作,免得它们占着茅坑不拉屎
// 比如会使得别的程序无法访问已经被它们打开的文件
cvReleaseCapture( &capture );
}
cvDestroyWindow("result");
return 0;
}
够清楚了吧,good luck
{
//========================================================
// 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 );注意不需要这句,因为frame是从视频中捕获的,没有单独分配内存,无需释放,当capture 释放的时候frame自然就释放了。
// 退出之前结束底层api的捕获操作,免得它们占着茅坑不拉屎
// 比如会使得别的程序无法访问已经被它们打开的文件
cvReleaseCapture( &capture );
}
cvDestroyWindow("result");
return 0;
}
够清楚了吧,good luck
相关文章推荐
- opencv读取视频文件并显示的程序详细解释
- 【opencv代码练习8】读取并显示视频文件
- DivX/XviD -opencv 视频文件读取显示问题解决
- 用OpenCV的VideoCapture类读取avi视频文件,并以帧流的形式显示出来!
- opencv程序十三:读取摄像头或视频文件
- python opencv 读取视频文件并显示
- OpenCV之读取视频并显示
- 基于Python OpenCV加载视频文件,显示,并绘制自定义文字
- 使用QT和Opencv获取文件夹中任意的视频文件并显示出来
- 一个简单但详细的解释Windows文件映射读取数据文件的例子
- 【Java Opencv系列】4.4读取视频并显示
- 【视频开发】opencv不能读取MP4格式文件
- 从摄像头或视频文件中读取视频流并显示
- 如何解决opencv读取avi视频文件一闪而过
- OpenCV读取视频文件方法
- OpenCV_读取文件夹下的图片生成视频文件
- OpenCV入门系列(7):读取摄像头,保存为视频文件
- 读取本地XML文件信息,在地图上添加标注,显示当前位置详细地理信息
- 从读取视频程序比较opencv1.0与2.0以上版本
- 基于OpenCV的AVI视频文件读取及运动检测