一種提高文件拍攝流暢性的方法及系統的制作方法
【技術領域】
[0001]本發明涉及文件拍攝及顯示技術領域,具體涉及一種提高文件拍攝流暢性的方法及系統。
【背景技術】
[0002]在通過視頻進行文件拍攝過程中,一般需要通過攝像頭或攝像機采集文件的圖像信息,然后將文件的圖像通過顯示設備以視頻的方式展示出來。在圖像以視頻的方式展示過程中,大致包括了幀處理、渲染以及顯示三部分。
[0003]幀處理是通過讀取攝像頭采集的幀數據并轉換成開源計算機圖像庫(OpenSource Computer Vis1nibrary,OpenCV)圖像,并將該圖像送入每個自定義的過濾器(Filter)中進行處理,過濾器是基于DirectShow創建的組件對象模型(COM),執行一些多媒體流的操作,如繪圖、批注等。過濾器的種類有很多,不同種類的過濾器相互連接在一起就形成了過濾器圖表。同時,幀處理過程還包括通過開源計算機圖像庫對視頻圖像進行的處理包括如視頻繪圖、視頻的旋轉、圖像的糾偏、圖像的自動捕捉與拍照、圖像的自動去黑邊、剪切等,高效率的實現了視頻圖像的實時處理。
[0004]在幀處理過程中,為了可以提高數據的處理速度,一般會在在通過dxshow打開攝像頭以后創建了一個線程,該線程專門負責讀取幀數據并將該幀數據進行過濾器處理,完后調用渲染模塊,將經過處理后的圖像顯示在用戶指定的窗口中。但是當用戶啟動了繪圖(或批注等)過濾器后,為了讓繪圖比較流暢,必須要把渲染的幀率提高起來,這時候就會出現一個現象,渲染(刷新)的幀率大于攝像頭本身支持的最大幀率,這個情況下如果還是每一幀數據都從攝像頭獲取,會拖慢渲染的速度,直接影響了用戶體驗。
[0005]由于在幀處理的時候引入了開源計算機圖像庫,這無疑簡化了圖像處理的難度,也降低了代碼的復雜度。但同時也帶來了一個問題,就是在渲染的時候OpenCV的圖像不能直接顯示到屏幕上,而是要先經過轉換,把OpenCV的圖像轉化為hbitmap (位圖句柄)對象,即轉換成適應于位塊轉換方式的位圖句柄圖像(位圖句柄圖像是通過位圖句柄對OpenCV的圖像進行相應的編碼形成的圖像),然后通過bitblt (位塊轉換)的方式進行圖像的顯示。圖像轉換是相當損耗CPU的性能的,同時bitblt的渲染由于沒有通過硬件加速,渲染的效率就比較低了,這樣當幀數據經過幀處理到渲染整個過程所需要的時間就長了,這個流暢的時間長度直接影響了用戶的體驗。
【發明內容】
[0006]針對以上不足,本發明的目的之一在于提供一種提高文件拍攝流暢性的方法,其通過將渲染的幀數據和通過攝像頭獲取的幀數據的速率進行分離,刷新較快時幀進行重復使用,可以在界面操作頻繁的時候設置較大的渲染速度,讓繪圖或者批注的操作相對流暢,同時通過異步渲染的方式使得幀處理的邏輯和渲染的邏輯分別運行在不同的兩個線程當中,比原來兩個邏輯都在同一個線程當中進行流水式的操作效率更好,提供了更好的用戶體驗。
[0007]為實現上述目的,本發明采取的技術方案是:
[0008]—種提高文件拍攝流暢性的方法,其包括以下步驟:
[0009]步驟1、通過攝像頭對文件進行圖像掃描,獲取所述文件的在前視頻圖像;
[0010]步驟2、采集所述在前視頻圖像,并將所述在前視頻圖像以及采集該在前視頻圖像的時間存儲到存儲單元中;
[0011]步驟3、創建幀處理線程;
[0012]步驟4、通過幀處理線程對存儲單元中的在前視頻圖像進行幀處理;
[0013]步驟5、幀處理完畢后,創建一渲染隊列和與所述渲染隊列對應的渲染隊列處理線程,所述渲染隊列在內存中建立;
[0014]步驟6、將幀處理后的在前視頻圖像壓入到所述渲染隊列中;
[0015]步驟7、通過渲染隊列處理線程實時檢測所述渲染隊列中是否存在在前視頻圖像,如果存在,則執行步驟8;
[0016]步驟8、通過渲染隊列處理線程對該在前視頻圖像進行渲染后使其顯示在用戶指定的窗口中;
[0017]步驟9、在步驟8中,如果渲染該在前視頻圖像的時間小于一間隔時間,則繼續執行步驟8,反之,則執行步驟10 ;
[0018]步驟10、對文件進行再次圖像掃描,獲取所述文件的在后視頻圖像,并將該在后視頻圖像依次執行步驟2、4、6、7的操作,所述間隔時間為采集所述在后視頻圖像的時間與采集在前視頻圖像的時間之差。
[0019]所述步驟I還包括通過麥克風捕獲音頻信息,并將所述音頻信息經步驟2-10進行處理。
[0020]所述步驟4中,幀處理線程將在前視頻圖像轉換成開源計算機圖像庫圖像,所述步驟8中,渲染隊列處理線程將所述開源計算機圖像庫圖像先轉換成位圖句柄圖像,然后再將位圖句柄圖像通過位塊轉換的方式在顯示在用戶指定的窗口中。
[0021]所述步驟4中,每次幀處理后執行掛起操作,所述間隔時間包括該掛起的時間。
[0022]所述步驟4中,如果在單位時間內從攝像頭獲取的視頻圖像幀數大于幀處理的視頻圖像幀數,則執行丟幀操作,所述丟幀操作為將多余部分不進行幀處理以及渲染而直接釋放,所述多余部分為在單位時間內從攝像頭獲取的視頻圖像幀與幀處理的視頻圖像幀相減后的視頻圖像幀。
[0023]本發明的另一目的在于提供一種提高文件拍攝流暢性的系統,其通過將渲染的幀數據和通過攝像頭獲取的幀數據的速率進行分離,刷新較快時幀進行重復使用,可以在界面操作頻繁的時候設置較大的渲染速度,讓繪圖或者批注的操作相對流暢,同時通過異步渲染的方式使得幀處理的邏輯和渲染的邏輯分別運行在不同的兩個線程當中,比原來兩個邏輯都在同一個線程當中進行流水式的操作效率更好,提供了更好的用戶體驗。
[0024]為實現上述目的,本發明采取的技術方案是
[0025]—種提高文件拍攝流暢性的系統,其包括:
[0026]圖像掃描單元,用于通過攝像頭對文件進行圖像掃描,獲取所述文件的在前視頻圖像;
[0027]圖像采集和存儲單元,采集所述在前視頻圖像,并將所述在前視頻圖像以及采集該在前視頻圖像的時間存儲到存儲單元中;
[0028]幀處理線程創建單元,用于創建幀處理線程;
[0029]幀處理單元,用于通過幀處理線程對存儲單元中的在前視頻圖像進行幀處理;
[0030]渲染隊列創建單元,用于在幀處理完畢后,創建一渲染隊列和與所述渲染隊列對應的渲染隊列處理線程,所述渲染隊列在內存中建立;
[0031]壓入單元,用于將幀處理后的在前視頻圖像壓入到該渲染隊列中;
[0032]檢測單元,用于通過渲染隊列處理線程實時檢測所述渲染隊列中是否存在在前視頻圖像,如果存在,則執行渲染和顯示單元;
[0033]渲染和顯示單元,用于通過渲染隊列處理線程對該在前視頻圖像進行渲染后使其顯示在用戶指定的窗口中;
[0034]比較單元,用于在渲染和顯示單元中,如果渲染該在前視頻圖像的時間小于一間隔時間,則繼續執行渲染和顯示單元,反之,則執行圖像再掃描單元;
[0035]圖像再掃描單元,用于對文件進行再次圖像掃描,獲取所述文件的在后視頻圖像,并將該在后視頻圖像依次執行圖像采集和存儲單元、幀處理單元、壓入單元以及渲染和顯示單元的操作,所述間隔時間為采集所述在后視頻圖像的時間與采集在前視頻圖像的時間之差。
[0036]所述圖像掃描單元還包括音頻信息采集單元,用于通過麥克風捕獲音頻信息,并將所述音頻信息經圖像采集和存儲單元、幀處理線程創建單元、幀處理單元、渲染隊列創建單元、壓入單元、檢測單元、清染和顯示單元、比較單元和圖像再掃描單元依次進行處理。
[0037]所述幀處理單元中,幀處理線程將在前視頻圖像轉換成開源計算機圖像庫圖像,所述渲染和顯示單元中,渲染隊列處理線程將所述開源計算機圖像庫圖像先轉換成位圖句柄圖像,然后再將位圖句柄圖像通過位塊轉換的方式在顯示在用戶