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