zoukankan      html  css  js  c++  java
  • 用opencv实现工控机的开机录像

    需要训练一个神经网络模型,可能需要用到很多视频数据,所以我想把手头的工控机设置为上电自启动,再借助opencv编译一个可执行文件,放在windows开机启动文件夹里,这样只要连接好摄像头和工控机以及电源,一旦工控机通电,自动启动windows,随后自动调用录像,我只要定时去拷数据就可以了。

    首先将工控机设置为开机自启动:

    我用的工控机为研华工控机,参考这个文档将工控机设置为上电启动。做法:(1)开机按delete,进入BIOS系统;(2)左右选择到chipset>PCIH-IO…(3)将restore ac power loss改为“power on”;(4)保存设置并重启。

    然后我在工控机上用VS编译了下面的代码:

     1 #include <iostream>
     2 #include <iomanip>
     3 #include <sstream>
     4 #include <string>
     5 #include <opencv2/core/core.hpp>
     6 #include <opencv2/imgproc/imgproc.hpp>
     7 #include <opencv2/highgui/highgui.hpp>
     8 
     9 
    10 using namespace cv;
    11 using namespace std;
    12 
    13 int main()
    14 {
    15     //open the camera
    16     VideoCapture cap(0);
    17 
    18     if(!cap.isOpened()){
    19         system("pause");
    20         return -1;
    21     }
    22 
    23     //设定帧率
    24     double rate= 20.0;
    25     cout << "Video rate: " << rate << "fps" << endl;
    26 
    27     Mat frame;
    28     cap>>frame;
    29     imshow("Video",frame);
    30 
    31     cout<<"Image size: "<<frame.size()<<endl;
    32 
    33     string filename="Video";
    34     string extension=".avi";
    35     stringstream outputfile;
    36     int digits=3;
    37 
    38     //两分钟一个视频
    39     int num_frame=(int)(rate*60*2);
    40 
    41     //连续录三个
    42     for(int i=0;i<3;)
    43     {
    44         outputfile.str("");
    45         outputfile<<filename<<setfill('0')<<setw(digits)<<i++<<extension;
    46         VideoWriter writer;
    47         writer.open(outputfile.str(),CV_FOURCC('X', 'V', 'I', 'D'),rate,frame.size());
    48 
    49         bool stop(false);
    50         int delay= 1000/rate;
    51         int num=0;
    52 
    53         while (!stop) 
    54         {
    55             cap>>frame;
    56             writer.write(frame);
    57             imshow("Video",frame);
    58             num++;
    59 
    60             //达到指定帧数,停止录像
    61             if(num>num_frame)
    62             {
    63                 stop=true;
    64                 writer.release();
    65                 cout<<"Save "<<outputfile.str()<<endl;
    66             }
    67 
    68             //按ESC退出录像
    69             if(waitKey(delay)==27)
    70             {
    71                 stop=true;
    72                 writer.release();
    73                 cout<<"Save "<<outputfile.str()<<endl;
    74                 i=100;
    75             }
    76 
    77         }
    78     }
    79 
    80 
    81     cap.release();
    82     system("pause");
    83     return 1;
    84 
    85 }
    View Code

    得到了.exe可执行文件,并将可执行文件放在了windows的启动文件下,这样就可以了。
    windows7的启动文件在哪里

  • 相关阅读:
    Web测试与App测试的区别-总结篇
    Shell之基本用法
    Samba服务部署
    Linux基础(3)
    linux基础(2)
    linux基础(2)
    Linux基础(1)
    网络基础及网络协议
    操作系统简介
    计算机基础重要性
  • 原文地址:https://www.cnblogs.com/w-tao13614/p/10652079.html
Copyright © 2011-2022 走看看