【整理】同一Hub 同时显示一块板上的两个USB摄像头

来源:互联网 发布:com和net域名哪个好 编辑:程序博客网 时间:2024/06/06 10:04

很多文章提到了双目相机的驱动 以及DirectShow SDK的安装,但是我在实际的操作中还是遇到了许多问题

目前解决了一部分,先在总结如下,供大家参考。


针对单Hub,就是2个摄像头共用一个USB接口



1.DirectShow SDK开发环境的搭建

在VS2013中导入并编译 DirectShow SDK 安装路径下\ Samples\C++\DirectShow \BaseClasses 工程,可以编译为debug版本,也可以编译release 版本。 编译成功后在\Samples\C++\DirectShow\BaceClasses\Debug_Unicode\目录下将产生相应的库。 将DirectShow SDK集成到我们的项目工程,以Amcap为例: 在VS2013中导入Amcap源码,右键点击工程选择 “属性-->配置属性-->VC++目录”中进行操作:
 在包含目录中添加
DirectShow\Include; DirectShow\Samples\C++\DirectShow\BaseClasses;
 在库目录中添加
DirectShow\Lib; DirectShow\Samples\C++\DirectShow\BaseClasses\Debug_Unicode; 在“配置属性-->链接器目录”中进行操作:
 在附加库目录中添加
DirectShow\Samples\C++\DirectShow\BaseClasses\Debug_Unicode; DirectShow\Lib; 点击工程“右键-->清理-->生成”,将生成exe可执行文件,即可调试。至此已成功搭建了DirectShow的开发环境。

这一部分最后直接将DirectShow整个文件(不是子文件)放到你的工程里面去,然后在进行添加,我的整个目录如下(比较长)

F:\documents13\visual studio 2013\Projects\BV_test_0508\BV_test_0508\DirectShow\Samples\C++\DirectShow\BaseClasses


ps:配置前默认已经在vs中配置好了opencv(配置参考链接http://johnhany.net/2013/11/environment-for-opencv-with-vs2010/)


主函数如下:


// CaptureTwoCamera.cpp : Defines the entry point for the console application.//#include <stdio.h>#include <highgui.h>#include "stdafx.h"#include "CameraDS.h"int _tmain(int argc, _TCHAR* 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);elseprintf("Can not get Camera #%d's name.\n", i);}if (cam_count == 0)return -1;CCameraDS camera1;CCameraDS camera2;//打开第一个摄像头//if(! camera.OpenCamera(0, true)) //弹出属性选择窗口 我的摄像头默认不是MJPEG 需要调一下(代码?本王不会啊!)有些人说到能显示一个另外一个是一个灰色的图有可能是格式的问题if (!camera1.OpenCamera(0, true, 320, 240)) //弹出属性选择窗口,用代码制定图像宽和高{fprintf(stderr, "Can not open camera1.\n");return -1;}if (!camera2.OpenCamera(1, true, 320, 240)) //弹出属性选择窗口,用代码制定图像宽和高{fprintf(stderr, "Can not open camera2.\n");return -1;}cvNamedWindow("camera1");cvNamedWindow("camera2");while (1){//获取一帧IplImage *pFrame1 = camera1.QueryFrame();IplImage *pFrame2 = camera2.QueryFrame();//显示/*cvShowImage("camera", pFrame);if (cvWaitKey(20) == 'q')break;*///cvShowMultiImages( "Multiple Cameras", 2, pFrame1, pFrame2);//cvReleaseImage(&frame1); //cvReleaseImage(&frame2);cvShowImage("camera1", pFrame1);cvShowImage("camera2", pFrame2);if (cvWaitKey(20) == 'q')break;}//camera.CloseCamera(); //可不调用此函数,CCameraDS析构时会自动关闭摄像头camera1.CloseCamera();camera2.CloseCamera();cvDestroyWindow("camera1");cvDestroyWindow("camera2");return 0;}


相关文件打包发到百度网盘 https://pan.baidu.com/s/1eR9Gt6i 提取码986e


关键是环境的配置一定要仔细




0 0
原创粉丝点击