全景視頻拼接(二):雙攝像頭獲取視頻

項目要求:利用雙攝像頭同時採集兩個視頻,離線拼接,將兩個視頻拼接成一個視頻。

該部分代碼實現功能:

利用雙攝像頭獲取視頻

#include <iostream>    
#include <opencv2/opencv.hpp>    
    
using namespace std;    
using namespace cv;    
    
int main()    
{    
    VideoCapture cap1(1);//開啓外接攝像頭,順序要從大到小    
    VideoCapture cap0(0);  
    if (cap1.isOpened() && cap0.isOpened())    
      cout << "camera is opened"<< endl;    
    else     
      cout << "camera is not opened" << endl;    
        
    
    bool stop = false;    
    Mat frame;    
    
        
    //設置攝像頭分辨率640*480 幀率30fps    
    cap0.set(CV_CAP_PROP_FRAME_HEIGHT, 480);    
    cap0.set(CV_CAP_PROP_FRAME_WIDTH, 640);  
    cap1.set(CV_CAP_PROP_FRAME_HEIGHT, 480);    
    cap1.set(CV_CAP_PROP_FRAME_WIDTH, 640);  
    //cap.set(CV_CAP_PROP_FPS, 30.0); //在連接有些外部usb攝像頭時需要將此句註釋掉  
  
    
    //保存視頻格式爲avi, 編碼爲MJPG    
    VideoWriter writer0("two_test0.avi",CV_FOURCC('M', 'J', 'P', 'G'),30, Size(640,480),true);    
    VideoWriter writer1("two_test1.avi",CV_FOURCC('M', 'J', 'P', 'G'),30, Size(640,480),true);  
    //通過總幀數控制拍攝時間,如果爲5s的視頻,循環5*30次;    
    Mat videoPlay0,videoPlay1;   
    int count = 150;    
    //namedWindow("videoplay", WINDOW_NORMAL);    
    namedWindow("videoplay0", WINDOW_AUTOSIZE);   
    namedWindow("videoplay1", WINDOW_AUTOSIZE);   
    while (count)    
    {    
        //cap >> videoPlay;    
        //writer << videoPlay;   
         cap0 >> videoPlay0;  //  
                                
        if(!cap0.read(videoPlay0))  // 讀取下一幀圖像   
                 break;   
        writer0 << videoPlay0;  
        imshow("videoplay0", videoPlay0);   
  
         cap1 >> videoPlay1;    
        if(!cap1.read(videoPlay1))  // 讀取下一幀圖像   
                 break;   
        writer1 << videoPlay1;  
        imshow("videoplay1", videoPlay1);   
        waitKey(30);    
        count --;    
    }    
  
  
   //讀取獲取到的視頻,進行圖像採集  
    VideoCapture cap00("two_test6.avi");   
    VideoCapture cap11("two_test7.avi");   
    if(cap00.isOpened() && cap11.isOpened())    
        cout << "ok ,have a video" << endl;    
    else   
        cout << "no video" << endl;  
  
  
  /*  Mat frame00,frame11;  
    int num0 = 1, num1 = 1;  
    string filename0;    
    char temp_file0[5];    
    string path0 = "C:\\Users\\Administrator\\Desktop\\pic_save\\parral_x";//can change the path    
    for (int i = 1; ;i++)    
    {    
        cap00 >> frame00;    
        if(frame00.empty())    
            break;    
        if(i % 5 == 0)    
        {    
           _itoa_s(num0, temp_file0, 4, 10);    
           filename0 = temp_file0;    
           filename0 = path0 + filename0 + ".jpg";    
           num0 ++;   
           imwrite (filename0,frame00);    
        }    
       }    
    cap00.release();   
  
    //重複上一步驟  
    string filename1;    
    char temp_file1[5];    
    string path1 = "C:\\Users\\Administrator\\Desktop\\pic_save\\parral_y";//can change the path    
    for (int i = 1; ;i++)    
    {    
        cap11 >> frame11;    
        if(frame11.empty())    
            break;    
        if(i % 5 == 0)    
        {    
           _itoa_s(num1, temp_file1, 4, 10);    
           filename1 = temp_file1;    
           filename1 = path1 + filename1 + ".jpg";    
           num1 ++;    
          imwrite (filename1,frame11);    
        }    
       }    
    cap11.release();   
    
    //system("pause");  */  
    
    return 0;    
    
}   


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章