用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的启动文件在哪里

 

posted @ 2019-04-03 22:43  w_tao13614  阅读(600)  评论(0编辑  收藏  举报