基于VFW的成像聲納視頻壓縮存儲設(shè)計
2.3 壓縮后位圖格式的設(shè)置
本文引用地址:http://www.ex-cimer.com/article/267428.htm在壓縮前位圖格式和編碼器的壓縮參數(shù)都已知的情況下,可使用ICCompressGetFormat宏來設(shè)置壓縮器的輸出格式,根據(jù)輸入位圖格式和選擇的編碼器的壓縮參數(shù),返回一種編碼器支持的輸出位圖格式。傳址調(diào)用要先定義一個結(jié)構(gòu)的指針,作為函數(shù)的第三個參數(shù)。函數(shù)返回時,指針指向的結(jié)構(gòu)就包含了編碼器的輸出位圖格式。
在VS2010中調(diào)試程序時,通過變量監(jiān)視查看到輸出位圖的信息頭,如圖 5 編碼器輸出位圖格式所示。由此可見Xvid編碼器將24位RGB格式仍然壓縮成24位RGB格式。
2.4 判斷壓縮支持
在進(jìn)行圖像壓縮之前需要判斷是否支持該壓縮方式。ICCompressQuery宏用來判斷選定的編碼器是否支持輸入格式或者是否能夠?qū)⑤斎敫袷綁嚎s成輸出格式,如果支持則返回ICERR_OK。使用時直接將設(shè)置好的壓縮器句柄、輸入位圖格式、輸出位圖格式當(dāng)作實(shí)參傳遞給ICCompressQuery宏即可。
這里定義了FrameStart函數(shù)來完成幀序列壓縮的資源分配,為使用幀圖像壓縮函數(shù)做準(zhǔn)備。它有兩個參數(shù):一個為編碼器的壓縮參數(shù),另一個為輸入數(shù)據(jù)的位圖格式。初始化成功返回TRUE。具體形式如下所示:
BOOL ICSeqCompressFrameStart(
PCOMPVARS pc, //壓縮參數(shù)
LPBITMAPINFO lpbiIn //輸入位圖格式 );
2.5 圖像壓縮與存儲
這里定義了ICCompress函數(shù)來完成單幀圖像的壓縮,并定義了一系列輔助函數(shù)來完成資源分配、資源釋放和壓縮后數(shù)據(jù)的存儲地址返回。每壓縮完一幀數(shù)據(jù),要先設(shè)置流的格式信息,然后就可以將壓縮后的視頻數(shù)據(jù)寫入AVI數(shù)據(jù)流。壓縮后的AVI文件通過普通的視頻播放器解壓播放,顯示畫面如圖 6(b)所示,與干端顯控軟件實(shí)時顯示的壓縮前的聲吶圖像基本一致,如圖 6(a)所示,人眼幾乎看不出差別,壓縮率達(dá)到10倍以上。由此可見,MPEG-4編碼標(biāo)準(zhǔn)圖像壓縮質(zhì)量高,同時壓縮率也高。
3 聲吶圖像壓縮效果評價
3.1 壓縮率
設(shè)計了兩種方法比較不同圖像數(shù)據(jù)的壓縮率,一種將標(biāo)準(zhǔn)正弦信號直接作為聲吶接收的回波信號,進(jìn)行信號處理以及波束形成后,干端實(shí)時接收顯示的圖像作為壓縮源,另一種將真實(shí)水域中聲吶接收到的回波信號,進(jìn)行信號處理以及波束形成后,干端實(shí)時接收顯示的圖像作為壓縮源。為了提高結(jié)果的可信度,在不同水域情況下壓縮比較,得到的聲吶圖像的壓縮率如表 2 所示。
從表中可以看出,圖像數(shù)據(jù)幀與幀之間、像素點(diǎn)與像素點(diǎn)之間冗余度越大,圖像的可壓縮程度越大,壓縮率越高??傮w來說,本文設(shè)計的成像聲納視頻壓縮存儲方法的標(biāo)準(zhǔn)壓縮率達(dá)到10倍以上,滿足系統(tǒng)的存儲需求。
c++相關(guān)文章:c++教程
評論