一个基于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个指针的作用。
解释得详细我还会追加分的,谢谢各位! 展开
#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个指针的作用。
解释得详细我还会追加分的,谢谢各位! 展开
2个回答
展开全部
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
{
//========================================================
// 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
展开全部
CvCapture
视频获取结构 没有公共接口,它只能被用来作为视频获取函数的一个参数。
cvCaptureFromFile把视频文件当成摄像头
cvGrabFrame
从摄像头或者文件中抓取帧。被抓取的帧在内部被存储。
cvRetrieveFrame
取回由函数cvGrabFrame抓取的图像
IplImage 图像
cvNamedWindow创建窗口
cvShowImage把图像显示到窗口
视频获取结构 没有公共接口,它只能被用来作为视频获取函数的一个参数。
cvCaptureFromFile把视频文件当成摄像头
cvGrabFrame
从摄像头或者文件中抓取帧。被抓取的帧在内部被存储。
cvRetrieveFrame
取回由函数cvGrabFrame抓取的图像
IplImage 图像
cvNamedWindow创建窗口
cvShowImage把图像显示到窗口
参考资料: http://www.opencv.org.cn
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询