用opencv實現工控機的開機錄像

 

須要訓練一個神經網絡模型,可能須要用到不少視頻數據,因此我想把手頭的工控機設置爲上電自啓動,再借助opencv編譯一個可執行文件,放在windows開機啓動文件夾裏,這樣只要鏈接好攝像頭和工控機以及電源,一旦工控機通電,自動啓動windows,隨後自動調用錄像,我只要定時去拷數據就能夠了。html

首先將工控機設置爲開機自啓動:ios

我用的工控機爲研華工控機,參考這個文檔將工控機設置爲上電啓動。作法:(1)開機按delete,進入BIOS系統;(2)左右選擇到chipset>PCIH-IO…(3)將restore ac power loss改成「power on」;(4)保存設置並重啓。git

而後我在工控機上用VS編譯了下面的代碼:windows

 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的啓動文件在哪裏網絡

相關文章
相關標籤/搜索