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++函数的默认参数和占位参数及较之C语言的拓展

    这篇文章主要介绍了C++中的默认参数和占位参数及较之C语言的拓展,需要的朋友可以参考下
    2016-03-03
  • C/C++中CJSON的使用(创建与解析JSON数据)

    C/C++中CJSON的使用(创建与解析JSON数据)

    cJSON是一个超轻巧的JSON解析器,本文主要介绍了C/C++中CJSON的使用(创建与解析JSON数据),具有一定的参考价值,感兴趣的可以了解一下
    2021-09-09
  • C语言详细分析讲解struct与union使用方法

    C语言详细分析讲解struct与union使用方法

    最近开始自学C语言,从最基础部分的开始学起。今天看书的时候注意到了struct和union似乎很像,除了名字不同,看起来几乎没有区别。<BR>既然C中定义了struct和union两个关键字,那么它们肯定是有区别的,在查了一些资料之后我来总结一下他们的使用
    2022-04-04
  • Easyx实现窗口自动碰撞的小球

    Easyx实现窗口自动碰撞的小球

    这篇文章主要为大家详细介绍了Easyx实现窗口自动碰撞的小球,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C++ QT QThread启动、停止、暂停和恢复的实现

    C++ QT QThread启动、停止、暂停和恢复的实现

    本文主要介绍了C++ QT QThread启动、停止、暂停和恢复的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • C++实现宾馆房间管理系统

    C++实现宾馆房间管理系统

    这篇文章主要为大家详细介绍了C++实现宾馆房间管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 详解C++设计模式编程中责任链模式的应用

    详解C++设计模式编程中责任链模式的应用

    这篇文章主要介绍了C++设计模式编程中责任链模式的应用,责任链模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,需要的朋友可以参考下
    2016-03-03
  • C++中纯虚函数的实例详解

    C++中纯虚函数的实例详解

    纯虚函数就是一个在基类中的虚函数,差别只是在一般的虚函数声明的后面加了“=0”,下面这篇文章主要给大家介绍了关于C++中纯虚函数的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • C语言中经socket接收数据的相关函数详解

    C语言中经socket接收数据的相关函数详解

    这篇文章主要介绍了C语言中经socket接收数据的相关函数详解,分别为recv()函数和recvfrom()函数以及recvmsg()函数的使用,需要的朋友可以参考下
    2015-09-09
  • C++中异常的深度解析

    C++中异常的深度解析

    异常处理机制允许程序中独立开发部分能够在运行时就出现的问题进行通信并做出相应的处理,这篇文章主要介绍了C++中异常的深度解析,需要的朋友可以参考下
    2025-03-03

最新评论