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是支持多個的,後面嘗試出來了繼續在本文中更新。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章