s1091403 作業6
主題 : Run-Length Based Image Compression 練習 作業說明 : 請設計一個基於 Run-Length 的壓縮方法,對圖檔作無失真壓縮後儲存成新檔案。 部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率。 ( 平均壓縮率 ) ( 壓縮檔 ) 開發環境 : Windows10 Anaconda 3(22.9.0) Spyder 5.4.1 Python 3.9 Opencv(4.7.0) Numpy(1.24.2) 程式片段 ( 程式碼截圖在 readme 中 ): 使用 cv2.imread() 輸入照片,接著進入 Compression 函式進行壓縮以及儲存壓縮檔。 Compression: 首先先透過 cv2.split() 取得三種顏色分別的數值 (b,g,r) ,使用 np.array() 將其轉成 array 型態 (np_b,np_g,np_r) 並透過 flitten() 變成一維陣列 (flt_b,flt_g,flt_r) ,接著分別進入 run_length 函式取得壓縮過後的 array(res_b,res_g,res_r) ,再將其組合在一起 (reslut) 並儲存成 txt 檔。 run_length: 使用 res 儲存結果,先取得第一個數字存於 temp 中,透過 count 計算讀入該數字的數量,接下來每次讀入一個數字,若是與 temp 相同則 count 加一,若不同則把 [count,temp] 放入 res 中, temp 變成當下的數字, count 恢復成 1 。 取得壓縮前後檔案大小並進入 pr()函式中 計算壓縮率並印出來,最後在計算平均壓縮率。 pr: 計算並印出及回傳壓縮率。 Demo 影片 : https://youtu.be/gDrkBWj...