一、介紹
攝像頭圖像采集處理在業(yè)界有著多種成熟的方案。從老的DirectShow、Grabber技術(shù),到新的Windows Media Foundation框架,網(wǎng)絡(luò)上都有著豐富的參考資料。OpenCV庫里面甚至提供了非常簡潔的接口,用戶只要一兩行代碼即可實(shí)現(xiàn)數(shù)據(jù)采集、編解碼等功能,使用起來甚是方便。但是,如果把數(shù)據(jù)采集的任務(wù)放到我們自己的程序中來實(shí)現(xiàn)的話,CPU的占用率會(huì)比較高。這在某些情況下不太可取。雖然可以實(shí)現(xiàn),但是在客戶端使用時(shí)效率非常低下。而公司恰好有一項(xiàng)開發(fā)任務(wù):要求采集到攝像頭數(shù)據(jù)后,對(duì)圖像數(shù)據(jù)進(jìn)行各種變換處理,然后傳遞給底層驅(qū)動(dòng)程序,實(shí)現(xiàn)虛擬攝像頭功能。具體的效果如果CamMask或者CamTwist:
嘗試過自己寫代碼采集攝像頭數(shù)據(jù),然后再進(jìn)行圖像處理。但是換了多種方式都不太理想。要么CPU占用率達(dá)到百分之五六十,要么內(nèi)存占用率達(dá)到六七百兆。采用DirectShow Filter似乎就成了唯一的一種方式。實(shí)際測試下來,3K分辨率的視頻CPU占用率保持在30%上下,內(nèi)存在150M上下。這個(gè)數(shù)據(jù)還是可以接受的。
二、DirectShow基礎(chǔ)
DirectShow是Microsoft DirectX技術(shù)體系中的一員,其他成員還包括DirectSound, DirectInput, DirectSetup, DirectX Graphics等。DirectShow技術(shù)是微軟為了解決多媒體應(yīng)用開發(fā)中的一些難題而提出的。例如:如何保證數(shù)據(jù)量巨大的多媒體數(shù)據(jù)處理的高效性?如何讓音視頻時(shí)刻保持同步?如何處理各種式樣的媒體格式問題?如何支持目標(biāo)系統(tǒng)中不可預(yù)知的硬件?DirectShow的設(shè)計(jì)初衷就是盡量讓應(yīng)用程序開發(fā)人員從復(fù)雜的數(shù)據(jù)傳輸、硬件差異、同步性等工作中解脫出來,總體應(yīng)用框架和底層工作由DirectShow來完成。DirectShow技術(shù)的總體運(yùn)行流程如下:
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26