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

#include"cv.h"#include"highgui.h"#include<stdio.h>#include<stdlib.h>#include<string.h... #include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <math.h>
#include <float.h>
#include <limits.h>
#include <time.h>
#include <ctype.h>

#ifdef _EiC
#define WIN32
#endif

int main( int argc, char** argv )
{
CvCapture* capture = 0;
IplImage *frame, *frame_copy = 0;
cvNamedWindow( "result", 1 );
capture = cvCaptureFromFile("c:\\Capture1.avi")

if( capture )
{
for(;;)
{
if( !cvGrabFrame( capture ))
break;
frame = cvRetrieveFrame( capture );
if( !frame )
break;
cvShowImage( "result", frame );
Sleep(66.9);
if( cvWaitKey( 10 ) >= 0 )
break;
}

cvReleaseImage( &frame_copy );
cvReleaseCapture( &capture );

}
cvDestroyWindow("result");

return 0;
}

这是一个读取视频文件的程序,因为我是个初学者,希望各位大虾帮忙解释一下这个程序,尤其是开头那3个指针的作用。
解释得详细我还会追加分的,谢谢各位!
展开
 我来答
百度网友ea0c74587
2009-07-22 · TA获得超过226个赞
知道答主
回答量:10
采纳率:0%
帮助的人:17.9万
展开全部
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;
}

够清楚了吧,good luck
mayinglai
2009-07-09 · 超过15用户采纳过TA的回答
知道答主
回答量:38
采纳率:0%
帮助的人:0
展开全部
CvCapture
视频获取结构 没有公共接口,它只能被用来作为视频获取函数的一个参数。

cvCaptureFromFile把视频文件当成摄像头

cvGrabFrame
从摄像头或者文件中抓取帧。被抓取的帧在内部被存储。

cvRetrieveFrame
取回由函数cvGrabFrame抓取的图像

IplImage 图像

cvNamedWindow创建窗口

cvShowImage把图像显示到窗口

参考资料: http://www.opencv.org.cn

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式