opencv双摄像头的读取
opencv双摄像头的读取(接两个网络摄像头)
首先,需要下载于老师的那个CameraDS类,详见本论坛
之后,只需要实例化两个CameraDS类的对象,即可解决问题。代码如下所示:#include "camerads.h"
#include "string"
#include
#include
#include
#include
using namespace std;
int main( int argc, char** argv )
{
int cam_count;
//仅仅获取摄像头数目
cam_count = CCameraDS::CameraCount();
printf("There are %d cameras.\n", cam_count);
//获取所有摄像头的名称
for(int i=0; i < cam_count; i++)
{
char camera_name[1024];
int retval = CCameraDS::CameraName(i, camera_name, sizeof(camera_name) );
if(retval >0)
printf("Camera #%d's Name is '%s'.\n", i, camera_name);
else
printf("Can not get Camera #%d's name.\n", i);
}
if(cam_count==0)
return -1;
// 创建2个摄像头类
CCameraDS camera1;
CCameraDS camera2;
if(! camera1.OpenCamera(0, false))
{
fprintf(stderr, "Can not open camera.\n");
return -1;
}
//打开第二个摄像头
camera2.OpenCamera(1, false);
cvNamedWindow("cam1");
cvNamedWindow("cam2");
while(1)
{
//获取一帧
IplImage *pFrame1 = camera1.QueryFrame();
IplImage *pFrame2 = camera2.QueryFrame();
// 显示实时的摄像头视频
cvShowImage("cam1", pFrame1);
cvShowImage("cam2", pFrame2);
//cvWaitKey(33);
int key = cvWaitKey(33);
if( key == 27 ) break;
}
camera1.CloseCamera(); //可不调用此函数,CCameraDS析构时会自动关闭摄像头camera2.CloseCamera();
cvDestroyAllWindows();
return 0;
}