2022年6月2日 星期四

s1081526作業6

 

1. 作業說明:

  • Run-length Based Image Compression練習
                    設計一個基於Run-Length的壓縮方法,對彩色圖檔作無失真壓縮後,存成新檔案

2. 開發環境:

    windows11
    opencv-python 4.5.5.64

3. 流程:

    *需要將圖片與程式碼放在同一個資料夾中*
    我使用for迴圈用一樣的流程處理三張圖片。(三張圖片的路徑存在一個list中)
     首先用split將RGB通道分開後,用遍歷跑過所有像素,針對每個像素的rgb值做紀錄:
shape[0]是圖片的高;shape[1]是寬
    
        RGB三個通道都有各自的計數(counter_b/
counter_g/counter_r),和用來存放壓縮後資料的list(cb/cg/cr)

        計算的部分我寫成了函式calculate,演算法是:參數會傳入計數器、目前像素的某channel值、上一個值、紀錄壓縮資料的list。
        如果目前值和上一個值一樣,計數器就+1;如果不一樣,就把計數器和上一個值寫入紀錄的list,然後上一個值=目前的值,計數器回歸1,如此遍歷每個像素。
        
        最後先將圖片的資料寫入檔案,再將壓縮後的bgr三通道的值分別寫入(我順序是用bgr)。
壓縮文件
        然後計算壓縮率:
        用Path("檔案路徑").state().st_size取得檔案大小
        壓縮前/壓縮後=壓縮率

    

沒有留言:

張貼留言