1.首先是读入一个视频文件
CvCapture结构体(让程序一帧一帧的读取,每得到一帧后,指针就转到下一帧的位置)
#include<stdio.h>
#include<cv.h>
#include<highgui.h>
using namespace std;
using namespace cv;
int main()
{
char filename[100]="F:\\movie\\a.mkv";
IplImage*img;
CvCapture*capture=cvCreateFileCapture(filename);
while(1)
{
img= cvQueryFrame(capture);
cvNamedWindow("img",1);
cvShowImage("img",img);
if(cvWaitKey(33)==27)//如果没有这个不显示图像
break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("img");
return 0;
}
cvWaitKey()不断的刷新图像,刷新图像的频率在()中,返回值为当前键盘按键值。27是Esc键的值, if(cvWaitKey(33)==27)
break;这句话表明如果按了Esc图像的读取就结束。
2.如果直接从摄像头读取
int main()
{
// char filename[100]="F:\\movie\\a.mkv";
IplImage*img;
CvCapture*capture=cvCreateCameraCapture(-1);//只有这个地方换了
while(1)
{
img= cvQueryFrame(capture);
cvNamedWindow("img",1);
cvShowImage("img",img);
if(cvWaitKey(33)==27)
break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("img");
return 0;
}
3.保存摄像头读取的连续的帧
int main()
{
char filename[100]="F:\\movie\\out.mkv";//不用自己创建,直接会生成
IplImage*img;
CvCapture*capture=cvCreateCameraCapture(-1);
CvSize size=cvSize((int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH),
(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT));
CvVideoWriter*writer=cvCreateVideoWriter(filename,CV_FOURCC('M','J','P','G'),
30,size);
while(1)
{
img= cvQueryFrame(capture);
cvNamedWindow("img",1);
cvShowImage("img",img);
if(cvWaitKey(33)==27)//如果没有这个不显示图像
break;
cvWriteFrame(writer,img);
}
cvReleaseCapture(&capture);
cvDestroyWindow("img");
return 0;
}