項目要求:利用雙攝像頭同時採集兩個視頻,離線拼接,將兩個視頻拼接成一個視頻。
該部分代碼實現功能:
利用雙攝像頭獲取視頻
#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;
}