opencv学习笔记(九)捕获摄像头的视频并保存成avi格式

来源:互联网 发布:zynga 知乎 编辑:程序博客网 时间:2024/05/17 03:47

        这个程序引用自下面的博客,但是运行之后我发现视频保存之后,要利用前面提到的opencv播放视频程序播放,不能用普通播放器播放——而且用前面的opencv程序播放时,图像是倒置的,需要我们在程序里面改一下。在while(1)里面加上一句

    cvFlip(frame, NULL, 0 );//翻转图像 

http://blog.csdn.net/augusdi/article/details/8868882


#include "cv.h"  

#include "highgui.h"  

#include "iostream"  

using namespace std;  

int main(int argc,char **argv[])

{  

 CvCapture *cap = cvCreateCameraCapture(0);//初始化相机捕获的指针  

 if (!cap)  

 {  

  cout<<"create camera capture error..."<<endl;  

  system("pause");  

  exit(-1);  

 }  

  

 IplImage *tempImg = cvQueryFrame(cap);  

 double fps = 20;  

 CvSize size = cvSize(  

  (int)cvGetCaptureProperty(cap, CV_CAP_PROP_FRAME_WIDTH),  

  (int)cvGetCaptureProperty(cap, CV_CAP_PROP_FRAME_HEIGHT)  

  );  

 CvVideoWriter *writer = cvCreateVideoWriter("test.avi", CV_FOURCC('X','V','I','D'), fps, size);  

  

 IplImage *img = cvCreateImage(size, 8, 3);  

 while((tempImg=cvQueryFrame(cap)) != NULL)  

 {  

  cvCopy(tempImg, img);  

  if (img->origin == IPL_ORIGIN_TL)  

  {  

   cvFlip(img, img);  

  }  

  cvWriteFrame(writer, img);  

 }  

   

 cvReleaseImage(&img);  

 cvReleaseCapture(&cap);  

 cvReleaseVideoWriter(&writer);  

  

 system("pause");  

 return 0;  

}  

9.1 cvQueryFrame() 

从摄像头或者文件中抓取并返回一帧

IplImage* cvQueryFrame( CvCapture* capture );

capture

视频获取结构。

函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并返回这一帧。这个函数仅仅是函数cvGrabFrame和函数cvRetrieveFrame在一起调用的组合。返回的图像不可以被用户释放或者修改。

9.2 cvReleaseCapture()

CvCapture结构使用结束后,可以调用cvReleaseCapture()来释放CvCapture结构。与OpenCV中大部分释放函数类似,这个函数读入一个指向capture结构的指针。

      void cvReleaseCapture(CvCapture** capture);


0 0
原创粉丝点击