用自带摄像头读取视频数据,并保存:
#include<opencv2\opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
CvCapture* capture = NULL;
//网上说想要保存就加上这句,但是我试了没有声明这句直接在后定义也能保存
//CvVideoWriter* writer = 0;
//capture = cvCaptureFromCAM(0);//貌似使用这两条语句都可以
capture = cvCreateCameraCapture(0);
IplImage* frame,*image;
CvSize size = cvSize((int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH), (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT));
//还是先获得视频capture的尺寸再用于image,frame没有初始化,如果用frame->width等来得到尺寸容易产生错误
//如果想用frame指向尺寸 得先捕捉一帧图像初始化frame
image = cvCreateImage(cvSize(size.width / 2, size.height / 2), 8, 3);
int fps = 15; //捕捉帧率,影响生成文件的播放速度
CvVideoWriter* writer = cvCreateVideoWriter("F:\\demo.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, cvGetSize(image));
cvNamedWindow("src");
cvNamedWindow("after");
//for (;;) 一直读
for (int i=0;i<90;i++)//8s
{
frame = cvQueryFrame(capture);
cvPyrDown(frame, image);
cvWriteFrame(writer, image);
cvShowImage("src", frame);
cvShowImage("after", image);
cvWaitKey(1000 / fps); //视频速度
}
cvReleaseCapture(&capture);
cvDestroyWindow("src");
cvDestroyWindow("after");
cvReleaseImage(&image);
return 0;
}