zoukankan      html  css  js  c++  java
  • VS2010 + OpenCV2.3.1打开多个摄像头



    转载请注明出处:http://blog.csdn.net/wl_soft50/article/details/7521970


    最近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()函数,下面是具体的代码:

    #include "stdafx.h"
    #include <core\core.hpp>
    #include <highgui\highgui.hpp>
    #include <imgproc\imgproc.hpp>
    #include <iostream>
    
    using namespace std;
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	////////////////////////////////////////////////
    	//Open Multi-Camera in OpenCV2.3.1
    	////////////////////////////////////////////////
    
    	IplImage* pFrame[4] = {NULL,NULL,NULL,NULL};
    
    	CvCapture* pCapture[4] = {NULL,NULL,NULL,NULL};
    
    	cvNamedWindow("Camera1",0);
    	cvNamedWindow("Camera2",0);
    	cvNamedWindow("Camera3",0);
    	//cvNamedWindow("Camera4",0);
    
    	cvResizeWindow("Camera1",300,300);
    	cvResizeWindow("Camera2",300,300);
    	cvResizeWindow("Camera3",300,300);
    	//cvResizeWindow("Camera4",300,300);
    
    	cvMoveWindow("Camera1",0,0);
    	cvMoveWindow("Camera2",0,330);
    	cvMoveWindow("Camera3",310,0);
    	//cvMoveWindow("Camera4",310,330);
    
    	pCapture[0] = cvCaptureFromCAM(0);
    	pCapture[1] = cvCaptureFromCAM(1);
    	pCapture[2] = cvCaptureFromCAM(2);
    	//pCapture[3] = cvCaptureFromCAM(3);
    
    	while(1)
    	{
    		pFrame[0] = cvQueryFrame(pCapture[0]);
    		pFrame[1] = cvQueryFrame(pCapture[1]);
    		pFrame[2] = cvQueryFrame(pCapture[2]);
    		//pFrame[3] = cvQueryFrame(pCapture[3]);
    
    		cvShowImage("Camera1",pFrame[0]);
    		cvShowImage("Camera2",pFrame[1]);
    		cvShowImage("Camera3",pFrame[2]);
    		//cvShowImage("Camera4",pFrame[3]);
    
    		char c = cvWaitKey(10);
    		if(c == 27)
    		{
    			break;
    		}
    	}
    	cvReleaseImage(&pFrame[0]);
    	cvReleaseImage(&pFrame[1]);
    	cvReleaseImage(&pFrame[2]);
    	//cvReleaseImage(&pFrame[3]);
    
    	cvReleaseCapture(&pCapture[0]);
    	cvReleaseCapture(&pCapture[1]);
    	cvReleaseCapture(&pCapture[2]);
    	//cvReleaseCapture(&pCapture[3]);
    
    	cvDestroyAllWindows();
    
    	return 0;
    }
    
    本来是想来打开4个的,但是第4个摄像头的内容和第3个是一样的,这边也没有具体去做研究(难道是只能打开三个?)。我觉得不怎么可能,因为directShow是支持多个的,后面尝试出来了继续在本文中更新。

  • 相关阅读:
    python总结4
    python中if __name__ == '__main__': 的解析
    matlab学习1
    phpstorm xdebug环境搭建
    uniapp 直播跳转小程序组件
    vue中异步函数async和await的用法
    TFS 2010安装配置(Advance)失败记录
    WIN2003 SMTP Service issue
    WIN2003 ftp server权限设置
    Discuz 7.2 SC UTF8设置
  • 原文地址:https://www.cnblogs.com/leven20061001/p/2724710.html
Copyright © 2011-2022 走看看