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

下載本文檔

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

文檔簡(jiǎn)介

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

DirectShow是DirectX的組件之一,DirectX軟件開(kāi)發(fā)包是Microsoft提供的一套在Windows平臺(tái)上開(kāi)發(fā)高性能圖形、聲音、輸入、輸出和網(wǎng)絡(luò)游戲的編程接口。這其中,DirectShow提供了應(yīng)用程序從適當(dāng)?shù)挠布胁蹲胶皖A(yù)覽音、視頻的能力。數(shù)據(jù)源包括:VCR、Camera、TVTuner、Microphone或其他的數(shù)據(jù)源。應(yīng)用程序可以立刻顯示捕捉的數(shù)據(jù)(預(yù)覽),或是保存到一個(gè)文件中。攝像頭采集信息常用的軟件AMCap就是基于DirectShowSDK編寫的。查閱一下官方文檔,感覺(jué)好難的樣子,難道要新學(xué)一門“快過(guò)時(shí)”的技術(shù)嗎?幸好于仕琪老師寫了一個(gè)CCameraDS類,可直接返回IplImage,使用方便。2.在VS2010中配置DirectShow并采集雙目攝像頭視頻下載DirectShow相關(guān)文件,我已經(jīng)共享在百度云盤,點(diǎn)擊下載。解壓以后copy到D:\opencv里(放在這里為了管理方便)在解決資源管理器中的項(xiàng)目名稱處右鍵\屬性\配置屬性\VC++目錄,引用目錄中添加DirectShow的include文件夾,我添加的是D:\opencv\DirectShow\Include在引用目錄下面有一個(gè)庫(kù)目錄,添加DirectShow的Lib文件夾,我添加的是D:\opencv\DirectShow\Lib;下載CCameraDS類相關(guān)文件,點(diǎn)擊下載。解壓以后把CameraDS.h,CameraDS.cpp復(fù)制到已經(jīng)配置好OpenCV庫(kù)的工程中,并添加到工程中。在解決資源管理器中,頭文件和源文件分別右鍵\添加\現(xiàn)有項(xiàng),把CCameraDS的頭文件和源文件添加進(jìn)去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,一個(gè)一個(gè)解決fatalerrorC1083:無(wú)法打開(kāi)包括文件:”dxtrans.h”:Nosuchfileordirectory下載的DirectShow包里面沒(méi)有該頭文件,全盤搜索Windows也沒(méi)有,后來(lái)發(fā)現(xiàn)使用該頭文件的是qedit.h,估計(jì)這個(gè)文件有問(wèn)題。直接在網(wǎng)上重新down了一個(gè)qedit.h(點(diǎn)擊下載),替代了DirectShow自帶的qedit.h,路徑如下D:\opencv\DirectShow\Include\qedit.h。其它解決方法參考這里,也有效果fatalerrorC1010:在查找預(yù)編譯頭時(shí)遇到意外的文件結(jié)尾。是否忘記了向源中添加“#include“StdAfx.h””?在CameraDS.cpp最上面一行添加#include"StdAfx.h"即可運(yùn)行,結(jié)果如下:改寫main函數(shù),顯示兩個(gè)攝像頭內(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;//手動(dòng)打開(kāi)攝像頭

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

//{

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

//return-1;

//}

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

//{

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

//return-1;

//}//自動(dòng)打開(kāi)攝像頭

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

最新文檔

評(píng)論

0/150

提交評(píng)論