由于最近有个项目要用到多个摄像头进行图像采集,然后将这些图片拼接起来组成一个整体图片。主机的USB插口有限,于是购买了两个7合一的USB扩展口,测试后发现同一时间只能读取两个摄像头。无法同时读取所有插口上的摄像头,于是就打算顺序来采集各个摄像头读取的图片,每次读取两个摄像头。
#include <iostream>
#include <opencv2/opencv.hpp>
#include <time.h>
using namespace std;
#define CAMNUM 14
double cost_time()
{
double clc = clock();
cout << clock() << endl;
return clc;
}
int main(int argc, char* argv[])
{
//Open Multi-Camera in OpenCV2.4.9
IplImage* pFrame[CAMNUM] = { NULL };
char filename1[] = "0.bmp";
char filename2[] = "1.bmp";
CvCapture* pCapture[CAMNUM] = { NULL };
/*调整窗口大小*/
cvNamedWindow("Camera", 0);
cvResizeWindow("Camera", 300, 300);
cvMoveWindow("Camera", 0, 0);
for (int i = 0; i < CAMNUM; i += 2)
{
filename1[0] = i + '0';
filename2[0] = i + 1 + '0';
pCapture[i] = cvCaptureFromCAM(i);
pCapture[i + 1] = cvCaptureFromCAM(i + 1);
/*从视频流中采集图像,为使采集的图片稳定,这里设定延时*/
for (int j = 0; j < 10; ++j)
{
/*采集*/
pFrame[i] = cvQueryFrame(pCapture[i]);
pFrame[i + 1] = cvQueryFrame(pCapture[i + 1]);
/*保存*/
cvSaveImage(filename1, pFrame[i]);
cvSaveImage(filename2, pFrame[i + 1]);
/*显示*/
cvShowImage("Camera", pFrame[i]);
cvShowImage("Camera", pFrame[i + 1]);
//cvWaitKey(5);
}
cvReleaseCapture(&pCapture[i]);
cvReleaseCapture(&pCapture[i + 1]);
}
// cvReleaseImage(&pFrame[0]);
cvDestroyAllWindows();
cost_time();
return 0;
}
这里共有14个摄像头,每次采集两个。
图片可以在同一个窗口中显示,为了提高速度,这里只需创建一次窗口即可。如果不需要显示的话,不需要创建显示窗口。