基于DirectShow的多攝像頭視頻采集_第1頁
基于DirectShow的多攝像頭視頻采集_第2頁
基于DirectShow的多攝像頭視頻采集_第3頁
基于DirectShow的多攝像頭視頻采集_第4頁
基于DirectShow的多攝像頭視頻采集_第5頁
全文預覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

基于DirectShow的多攝像頭視頻采集1.為什么使用DirectShow筆者使用的是兩個USB攝像頭,單攝像頭視頻采集使用OpenCV的VideoCapture類沒有問題,但是雙攝像頭就有問題,一個正常,另外一個采集不到信息,顯示一片灰色。網(wǎng)上有種解決方法是逆序打開攝像頭,結(jié)果兩個窗口是可以采集到視頻信息,但是竟然是同一個攝像頭的視頻信息,無奈的只能使用DirectShow采集多攝像頭視頻信息。先看看什么是DirectShow:

DirectShow是DirectX的組件之一,DirectX軟件開發(fā)包是Microsoft提供的一套在Windows平臺上開發(fā)高性能圖形、聲音、輸入、輸出和網(wǎng)絡(luò)游戲的編程接口。這其中,DirectShow提供了應用程序從適當?shù)挠布胁蹲胶皖A覽音、視頻的能力。數(shù)據(jù)源包括:VCR、Camera、TVTuner、Microphone或其他的數(shù)據(jù)源。應用程序可以立刻顯示捕捉的數(shù)據(jù)(預覽),或是保存到一個文件中。攝像頭采集信息常用的軟件AMCap就是基于DirectShowSDK編寫的。查閱一下官方文檔,感覺好難的樣子,難道要新學一門“快過時”的技術(shù)嗎?幸好于仕琪老師寫了一個CCameraDS類,可直接返回IplImage,使用方便。2.在VS2010中配置DirectShow并采集雙目攝像頭視頻下載DirectShow相關(guān)文件,我已經(jīng)共享在百度云盤,點擊下載。解壓以后copy到D:\opencv里(放在這里為了管理方便)在解決資源管理器中的項目名稱處右鍵\屬性\配置屬性\VC++目錄,引用目錄中添加DirectShow的include文件夾,我添加的是D:\opencv\DirectShow\Include在引用目錄下面有一個庫目錄,添加DirectShow的Lib文件夾,我添加的是D:\opencv\DirectShow\Lib;下載CCameraDS類相關(guān)文件,點擊下載。解壓以后把CameraDS.h,CameraDS.cpp復制到已經(jīng)配置好OpenCV庫的工程中,并添加到工程中。在解決資源管理器中,頭文件和源文件分別右鍵\添加\現(xiàn)有項,把CCameraDS的頭文件和源文件添加進去main函數(shù)寫入如下內(nèi)容#include"stdafx.h"

#include

#include

#include

#include

#include

#include

#include"CameraDS.h"usingnamespacecv;

intmain()

{

intcam_count;

//僅僅獲取攝像頭數(shù)目

cam_count=CCameraDS::CameraCount();

printf("Thereare%dcameras.\n",cam_count);

}編譯,error,一個一個解決fatalerrorC1083:無法打開包括文件:”dxtrans.h”:Nosuchfileordirectory下載的DirectShow包里面沒有該頭文件,全盤搜索Windows也沒有,后來發(fā)現(xiàn)使用該頭文件的是qedit.h,估計這個文件有問題。直接在網(wǎng)上重新down了一個qedit.h(點擊下載),替代了DirectShow自帶的qedit.h,路徑如下D:\opencv\DirectShow\Include\qedit.h。其它解決方法參考這里,也有效果fatalerrorC1010:在查找預編譯頭時遇到意外的文件結(jié)尾。是否忘記了向源中添加“#include“StdAfx.h””?在CameraDS.cpp最上面一行添加#include"StdAfx.h"即可運行,結(jié)果如下:改寫main函數(shù),顯示兩個攝像頭內(nèi)容intmain()

{

intcam_count;//僅僅獲取攝像頭數(shù)目

cam_count=CCameraDS::CameraCount();

printf("Thereare%dcameras.\n",cam_count);//獲取所有攝像頭的名稱

for(inti=0;i<cam_count;i++)

{

charcamera_name[1024];

intretval=CCameraDS::CameraName(i,camera_name,sizeof(camera_name));if(retval>0)

printf("Camera#%d'sNameis'%s'.\n",i,camera_name);

else

printf("CannotgetCamera#%d'sname.\n",i);

}if(cam_count==0)

return-1;CCameraDScamera1,camera2;//手動打開攝像頭

//if(!camera1.OpenCamera(0,true))//彈出屬性選擇窗口

//{

//fprintf(stderr,"Cannotopencamera1.\n");

//return-1;

//}

//if(!camera2.OpenCamera(1,true))//彈出屬性選擇窗口

//{

//fprintf(stderr,"Cannotopencamera2.\n");

//return-1;

//}//自動打開攝像頭

if(!camera1.OpenCamera(0,false,320,240))//不彈出屬性選擇窗口,用代碼制定圖像寬和高

{

fprintf(stderr,"Cannotopencamera1.\n");

return-1;

}if(!camera2.OpenCamera(1,false,320,240))//不彈出屬性選擇窗口,用代碼制定圖像寬和高

{

fprintf(stderr,"Cannotopencamera2.\n");

return-1;

}while(1)

{

//獲取一幀

IplImage*pFrame1=camera1.QueryFrame();

IplImage*pFrame2=camera2.QueryFrame();//顯示

cvShowImage("camera1",pFrame1);

cvShowImage("camera2",pFrame2);if(cvWaitKey(20)=='q')

break;

}

camera1.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論