需要训练一个神经网络模型,可能需要用到很多视频数据,所以我想把手头的工控机设置为上电自启动,再借助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的启动文件在哪里

 

版权声明:本文为w-tao13614原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/w-tao13614/p/10652079.html