opencv实现定时录像功能

 更新时间:2018年06月10日 10:58:43   作者:jinggeZ3  
这篇文章主要为大家详细介绍了opencv实现定时录像功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

opencv作为一款强大的机器视觉库,以其简便性得到了各图像处理开发人员的青睐。现在就给大家介绍如何用opencv实现定时录像并以实际时间作为文件名保存。之前网上已经有一些类似的代码,但是大多数网友反映程序无法执行,主要分析有两个原因。电脑上未安装视频编码器,这里推荐大家XviD,网上不好下载可以私信我或是留下邮箱,我统一发送。然后在选择编码格式上,我选择的是'X', 'V', 'I', 'D'格式,也就是我们常见的avi格式。

  #include "cv.h"  
  #include "cxcore.h"  
  #include "highgui.h"  
  #include <iostream>  
  #include <time.h> 
  #include <Windows.h> 
  #include <Mmsystem.h> 
  #include "stdio.h"  
  int timea=100000;  
  using namespace std;  
/*void times() 
{ 
  SYSTEMTIME sys_time; 
 
  //将变量值设置为本地时间 
  GetLocalTime( &sys_time ); 
 
  //输出时间 
  printf( "%4d/%02d/%02d %02d:%02d:%02d.%03d 星期%1d\n",sys_time.wYear, 
    sys_time.wMonth, 
    sys_time.wDay, 
    sys_time.wHour, 
    sys_time.wMinute, 
    sys_time.wSecond, 
    sys_time.wMilliseconds, 
    sys_time.wDayOfWeek); 
 
 // system("time"); 
  // 
 // system("pause"); 
  return 0; 
 
 
} */ 
  int main()  
  {  
    CvCapture* capture=cvCaptureFromCAM(0);  
    CvVideoWriter* video=NULL;  
    IplImage* frame=NULL;  
    int n;  
    if(!capture) //如果不能打开摄像头给出警告  
    {  
     cout<<"Can not open the camera."<<endl;  
     return -1;  
    }  
    else  
    {  
     frame=cvQueryFrame(capture); //首先取得摄像头中的一帧  
    int c=0; 
    SYSTEMTIME sys_time; 
 
  //将变量值设置为本地时间 
    GetLocalTime( &sys_time ); 
    char buf[1024]; 
    sprintf(buf,"camera-%4d-%2d-%02d-%02d-%02d-%02d.avi",sys_time.wYear,sys_time.wMonth,sys_time.wDay, 
    sys_time.wHour,sys_time.wMinute, sys_time.wSecond);  
 
      video=cvCreateVideoWriter(buf, CV_FOURCC('X', 'V', 'I', 'D'), 25,  
     cvSize(frame->width,frame->height)); //创建CvVideoWriter对象并分配空间  
  //保存的文件名为camera.avi,编码要在运行程序时选择,大小就是摄像头视频的大小,帧频率是32  
     if(video) //如果能创建CvVideoWriter对象则表明成功  
      {  
       cout<<"VideoWriter has created."<<endl;  
     }  
   cout<<"set the record time\n"<<endl;//设置录像时间 
   cin>>timea; 
   int ti=timea*25; 
    
    
     cvNamedWindow("Camera Video",1); //新建一个窗口  
      int i = 0;  
     while(i <= ti) // 让它循环ti次自动停止录取  
      {  
       frame=cvQueryFrame(capture); //从CvCapture中获得一帧  
       if(!frame)  
       {  
        cout<<"Can not get frame from the capture."<<endl;  
        break;  
       }  
       n=cvWriteFrame(video,frame); //判断是否写入成功,如果返回的是1,表示写入成功  
       // cout<<n<<endl;  
       cvShowImage("Camera Video",frame); //显示视频内容的图片  
       i++;  
       if(cvWaitKey(2)>0)   
        break; //有其他键盘响应,则退出  
     }  
    
     cvReleaseVideoWriter(&video); //如果不释放则春不上 
     cvReleaseCapture(&capture);  
     cvDestroyWindow("Camera Video");  
    }  
    return 0;  
  }  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C++语言基础 命名空间

    C++语言基础 命名空间

    一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,当有两个人都同时定义了一个名字相同的全局变量或函数的时候,若是把他们的代码整合在一块编译,此时编译器就会提示变量或函数重复定义,C++为了解决这个问题,便引用了命名空间(namespace)的概念
    2020-01-01
  • C++实现邻接表顶点的删除

    C++实现邻接表顶点的删除

    这篇文章主要为大家详细介绍了C++实现邻接表顶点的删除,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C语言中lseek()函数和fseek()函数的使用详解

    C语言中lseek()函数和fseek()函数的使用详解

    这篇文章主要介绍了C语言中lseek()函数和fseek()函数的使用详解,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08
  • C++11右值引用和转发型引用教程详解

    C++11右值引用和转发型引用教程详解

    这篇文章主要介绍了C++11右值引用和转发型引用教程详解,需要的朋友可以参考下
    2018-03-03
  • 从C语言过渡到C++之const

    从C语言过渡到C++之const

    C++中最早引入const是为了替代#define,后来又衍生出了其它用法。这一篇中我们来详细介绍const的各种常见用法。希望对大家学习C++有所帮助。
    2017-07-07
  • C++设计模式编程中简单工厂与工厂方法模式的实例对比

    C++设计模式编程中简单工厂与工厂方法模式的实例对比

    这篇文章主要介绍了C++设计模式编程中简单工厂与工厂方法模式的实例对比,文中最后对两种模式的优缺点总结也比较详细,需要的朋友可以参考下
    2016-03-03
  • C语言中字符串和数字的相互转换实现代码

    C语言中字符串和数字的相互转换实现代码

    以下是对C语言中字符串和数字的相互转换实现代码进行了分析介绍,需要的朋友可以参考下
    2013-07-07
  • OpenCV图像几何变换之透视变换

    OpenCV图像几何变换之透视变换

    这篇文章主要为大家详细介绍了OpenCV图像几何变换之透视变换,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • 实例讲解C++ 命名空间

    实例讲解C++ 命名空间

    这篇文章主要介绍了C++ 命名空间的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下
    2020-06-06
  • OpenCV cv.Mat与.txt文件数据的读写操作

    OpenCV cv.Mat与.txt文件数据的读写操作

    这篇文章主要介绍了OpenCV cv.Mat 与 .txt 文件数据的读写操作,现在分享给大家,也给大家做个参考
    2018-05-05

最新评论