VS2010 + OpenCV2.3.1打开多个摄像头

最近OpenCV更新到2.3.1的版本了,而自己之前使用的是2.1的版本,最近一段时间也是去研究OpenNI的代码去了,所以对于2.3.1的版本新增的功能也没有很多的了解。这次就了解OpenCV2.3.1版本与OpenCV2.1的区别做了以下功能的展示。

OpenCV2.3.1在VS2010上的配置就不详述了,网上一堆一堆的。其实,OpenCV每次的更新都会在其官方的网站上做比较详细的说明,这边我就其官方的说明结合自己的使用情况简单的总结:

1、OpenCV自2.2以后的版本的模块都有仔细划分,不再是2.1及以前的5个模块(cxcore/cv/highgui/ml/cvaux);

2、在畸变校正的程式上有比较大的改变,适合更大的畸变校正;

3、支持android系统,程式API调用稳定性更高(以前还做过在android中嵌入OpenCV,现在更方便了);

4、增加新概念:视网膜识别,并有参考资料;

5、人物识别有比较好的方法,(Haar小波&LBP人脸检测识别,HOG人检测等);

6、增加三目摄像头(OpenCV2.1支持2个)(我要分享给大家的,呵呵...)。

当然更新的部分不会使这么多了,还有其他的比较多的我没有介绍,想具体的了解请参考:(http://opencv.willowgarage.com/wiki/OpenCV%20Change%20Logs)。

讲到主题好了,OpenCV中打开多摄像头之前很多人研究过了,需要用到DirectShow,在OpenCV中文网上于老师也将DS进行打包,直接在OpenCV直接可以调用了。如果有兴趣,也可以做尝试,这里可以下载源程序。因为OpenCV2.3.1中把DirectShow的程式整合进去了,就可以直接进行调用了(其实是一样的道理),就是cvCaptureFromCAM()函数,下面是具体的代码:

[cpp]  view plain  copy
  1. #include "stdafx.h"  
  2. #include <core\core.hpp>  
  3. #include <highgui\highgui.hpp>  
  4. #include <imgproc\imgproc.hpp>  
  5. #include <iostream>  
  6.   
  7. using namespace std;  
  8.   
  9.   
  10. int _tmain(int argc, _TCHAR* argv[])  
  11. {  
  12.       
  13.     //Open Multi-Camera in OpenCV2.3.1  
  14.       
  15.   
  16.     IplImage* pFrame[4] = {NULL,NULL,NULL,NULL};  
  17.   
  18.     CvCapture* pCapture[4] = {NULL,NULL,NULL,NULL};  
  19.   
  20.     cvNamedWindow("Camera1",0);  
  21.     cvNamedWindow("Camera2",0);  
  22.     cvNamedWindow("Camera3",0);  
  23.     //cvNamedWindow("Camera4",0);  
  24.   
  25.     cvResizeWindow("Camera1",300,300);  
  26.     cvResizeWindow("Camera2",300,300);  
  27.     cvResizeWindow("Camera3",300,300);  
  28.     //cvResizeWindow("Camera4",300,300);  
  29.   
  30.     cvMoveWindow("Camera1",0,0);  
  31.     cvMoveWindow("Camera2",0,330);  
  32.     cvMoveWindow("Camera3",310,0);  
  33.     //cvMoveWindow("Camera4",310,330);  
  34.   
  35.     pCapture[0] = cvCaptureFromCAM(0);  
  36.     pCapture[1] = cvCaptureFromCAM(1);  
  37.     pCapture[2] = cvCaptureFromCAM(2);  
  38.     //pCapture[3] = cvCaptureFromCAM(3);  
  39.   
  40.     while(1)  
  41.     {  
  42.         pFrame[0] = cvQueryFrame(pCapture[0]);  
  43.         pFrame[1] = cvQueryFrame(pCapture[1]);  
  44.         pFrame[2] = cvQueryFrame(pCapture[2]);  
  45.         //pFrame[3] = cvQueryFrame(pCapture[3]);  
  46.   
  47.         cvShowImage("Camera1",pFrame[0]);  
  48.         cvShowImage("Camera2",pFrame[1]);  
  49.         cvShowImage("Camera3",pFrame[2]);  
  50.         //cvShowImage("Camera4",pFrame[3]);  
  51.   
  52.         char c = cvWaitKey(10);  
  53.         if(c == 27)  
  54.         {  
  55.             break;  
  56.         }  
  57.     }  
  58.     cvReleaseImage(&pFrame[0]);  
  59.     cvReleaseImage(&pFrame[1]);  
  60.     cvReleaseImage(&pFrame[2]);  
  61.     //cvReleaseImage(&pFrame[3]);  
  62.   
  63.     cvReleaseCapture(&pCapture[0]);  
  64.     cvReleaseCapture(&pCapture[1]);  
  65.     cvReleaseCapture(&pCapture[2]);  
  66.     //cvReleaseCapture(&pCapture[3]);  
  67.   
  68.     cvDestroyAllWindows();  
  69.   
  70.     return 0;  
  71. }  
本来是想来打开4个的,但是第4个摄像头的内容和第3个是一样的,这边也没有具体去做研究(难道是只能打开三个?)。我觉得不怎么可能,因为directShow是支持多个的,后面尝试出来了继续在本文中更新。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值