s1081540 作業 6
主題:Run-Length Based Image Compression 練習
作業說明
附件中為三張利用將晶片高度以色彩視覺化後的圖片。
請設計一個基於 Run-Length 的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。
部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率(compression ratio)。
開發環境
- Windows 10
- OpenCV 4.2.0
- Visual Studio 2019
- C++
- Windows 10
- OpenCV 4.2.0
- Visual Studio 2019
- C++
程式實作
- 使用 imread() 讀入附件中的圖像,再使用 empty() 判斷圖片是否存在,若圖像讀取失敗會輸出錯誤訊息並結束程式。
- split() :將彩色圖像拆分為3個單一通道(B、G、R)。
- 分別對3個單一通道(B、G、R)進行Run-Length編碼壓縮。
- Run-Length Encoding:將連續重複的資料改以兩個部份來表示,第一個byte代表顏色(0~255),第二個byte代表該顏色連續出現的次數。
- 將壓縮後的資料寫入txt文字檔。
- txt文字檔的內容包含:影像的列數、影像的行數、B通道的壓縮資料、G通道的壓縮資料、R通道的壓縮資料。
- imshow() :顯示原圖及經過膚色檢測後的圖像。
- 計算壓縮率。
- 資料壓縮比 = 壓縮前的資料量大小 / 壓縮後的資料量大小。
- 輸出影像的列數、影像的行數、原來的檔案大小、壓縮後的檔案大小、壓縮率。
- waitKey(0) :透過使用者輸入0來中止程式。
執行結果
- img1
▲ img1圖像及原始檔案大小 ▲ 將img1壓縮後的文字檔部分內容及壓縮後的檔案大小 ▲ 輸出結果 - img2
▲ img2圖像及原始檔案大小 ▲ 將img2壓縮後的文字檔部分內容及壓縮後的檔案大小 ▲ 輸出結果 - img3
▲ img3圖像及原始檔案大小 ▲ 將img3壓縮後的文字檔部分內容及壓縮後的檔案大小 ▲ 輸出結果 - 壓縮率
- img1壓縮率 = 2.070107752429847
- img2壓縮率 = 1.213333514247755
- img3壓縮率 = 2.239885522678505
- 平均壓縮率 = ( 2.070107752429847 + 1.213333514247755 + 2.239885522678505 ) / 3 = 5.523326789356107 / 3 = 1.841108929785369
▲ 程式執行過程
參考資料
- Operations on arrays - OpenCV Documentation:https://docs.opencv.org/3.4/d2/de8/group__core__array.html
- 在C 中查找文件的大小(以字節為單位) - Techie Delight:https://www.techiedelight.com/zh-tw/find-size-of-file-c/
留言
張貼留言