您的位置:首页 > 运维架构

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

2014-07-23 15:27 281 查看
转自:/article/8020366.html

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: