一、从摄像头捕获视频、显示、存储捕获的视频序列
<span style="font-size:14px;">#include "stdafx.h"
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
int main( int argc, char** argv )
{
//声明IplImage指针
IplImage* pFrame = NULL;
//获取摄像头
CvCapture* pCapture = cvCreateCameraCapture(-1); //只有一个摄像头使用-1即可
//创建窗口
cvNamedWindow("video", 1);
pFrame=cvQueryFrame( pCapture );
CvVideoWriter *pWriter; //定义CvVideoWriter型指针
pWriter = cvCreateVideoWriter("E:\\test.avi",CV_FOURCC('D','I','V','X'),24,cvSize(pFrame->width,pFrame->height),1);
cvWriteFrame(pWriter,pFrame); //写视频帧到文件E:\\test.avi 注意双斜杠
//显示视屏
int i=0;
while(1)
{
pFrame=cvQueryFrame( pCapture );
if(!pFrame)break;
cvShowImage("video",pFrame);
cvWriteFrame(pWriter,pFrame);
char c=cvWaitKey(33); //暂停33ms 等待按键按下
if(c==113)break; //按下q键 则程序退出
//i++;
}
cvReleaseCapture(&pCapture);
cvReleaseVideoWriter(&pWriter);
cvDestroyWindow("video");
return 0;
}</span>
二、实现与一类似的功能(但代码结构更加清晰合理)
#include "stdafx.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
void main()
{
VideoCapture capture(0);
VideoWriter writer("e:\\VideoTest.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25.0, Size(640, 480));
Mat frame; //mat数据类型
while (capture.isOpened())
{
capture >> frame; //流操作
writer << frame;
imshow("video", frame);
if (cvWaitKey(20) == 27) //按下回车键 程序退出
{
break;
}
}
}
三、C++计算程序运行耗时(耗时的计算结果不会将期间程序等待的时间计算入内)
while (capture.isOpened())
{
int start=clock();
capture >> frame; //流操作
writer << frame;
imshow("video", frame);
if (cvWaitKey(10) == 113) //按下q键 程序退出
{
break;
}
cout<<"程序执行过程耗时:"<<clock()-start<<"毫秒"<<endl; //将if语句注释起来,其执行结果和没有注释之前差不多
}