須要訓練一個神經網絡模型,可能須要用到不少視頻數據,因此我想把手頭的工控機設置爲上電自啓動,再借助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 }
獲得了.exe可執行文件,並將可執行文件放在了windows的啓動文件下,這樣就能夠了。
windows7的啓動文件在哪裏網絡