s1093309 作業6

 Run-Length Based Image Compression 練習

    附件中為三張利用將晶片高度以色彩視覺化後的圖片。

    請設計一個基於Run-Length 的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。

    部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率

    (compression ratio)。

作業環境:

    OS:windows10

    Editor:Visual Studio 2019

    Language:C++
    
    Package:OpenCV - 4.7.0

程式說明:
1.首先,指定圖片的存放位置和檔案名稱格式。
2.使用迴圈依次讀取10張圖片。
3.對於每張圖片,讀取圖片並確認是否讀取成功。
4.將圖片轉換為壓縮前的位元組數組,並將其存儲在imageData向量中。
5.創建一個壓縮後的位元組向量compressedData,並初始化計數器count為1。
6.從圖片的左上角到右下角進行遍歷,對每個像素進行Run-Length編碼:
*如果當前像素與前一個像素相同,增加計數器count。
*如果當前像素與前一個像素不同,將前一個像素的RGB值和計數器count存儲到compressedData中, 然後重新初始化計數器count。

7.將最後一個像素的RGB值和計數器count存儲到compressedData中。
8.將壓縮後的資料以二進制形式寫入到以".bin"為擴展名的壓縮檔案中。
9.讀取壓縮後的資料,並將其存儲到File_compressedData向量中。
10.解壓縮資料,將壓縮資料中的像素值和計數器進行還原,並將解壓縮後的像素值存儲到uncompressedData向量中。
11.創建解壓縮後的圖片File_img,並將uncompressedData中的像素值填充到圖片中。
12.將解壓縮後的圖片以BMP檔案格式儲存。

程式碼中使用了迴圈和條件語句來處理多張圖片,並且使用了OpenCV的imread函式讀取圖片、imencode函式將圖片轉換為位元組數組、imwrite函式將圖片寫入到檔案,以及fstream庫中的函式來進行檔案的讀寫操作。

留言

這個網誌中的熱門文章

rzwang Homework #1

s1101438 Homework #1