s1091530 作業6

 

1. 開發環境

windows11

Python:3.8.13

opencv-python:4.7.0.72

numpy:1.24.2


2. 功能

● def compress_image():

imread() : 讀取圖片,獲得圖像的寬與高,並將寬和高先寫入txt檔儲存。

cv2.split(image) : 將BGR通道的資料拆分為三個向量。

flattened = channel.flatten() : 將二維向量展平為一維。


執行run-length壓縮步驟:

記錄當前像素值的連續出現次數。

使用迴圈遍歷 flattened 列表中的像素值,從第二個元素開始。

檢查當前像素值是否與前一個像素值相同。

如果是,則表示遇到連續相同的像素值,將 current_count增加 1,以記錄連續出現的次數。

如果不是,則表示遇到新的像素值,將當前像素值和連續出現次數(current_pixel 和 current_count)作為一對(tuple)添加到 compressed 列表中,並更新 current_pixel 和 current_count 的值為新的像素值和 1。


最後將壓縮資訊寫入txt檔案。


●  def decompress_image():

從txt檔案讀取寬高資訊。

再來從txt檔案讀取壓縮資訊並還原圖像。

image = np.zeros((height, width, 3), dtype=np.uint8):創建一個大小為 height × width × 3 的零矩陣 image,用於存儲還原的圖像。這裡假設原始圖像是彩色圖像,因此使用 3 個通道。

list(map(int, pixels_counts)) : 將像素值和次數的列表轉換為整數類型。

image[row, col, channel_index] = pixel : 將還原的像素值 pixel 存儲到 image 矩陣的對應位置上。row 和 col 分別表示像素在圖像中的行和列位置,而 channel_index 則表示目前處理的通道。

最後儲存影像。


●  def calculate_compression_ratio():

獲取原始圖像大小。

獲取原始圖像大小。

計算壓縮率: compression_ratio = (compressed_size / original_size) * 100。


3. 結果


img1 size


img1


img2 size


img2


img3 size


img3








留言

這個網誌中的熱門文章

rzwang Homework #1

s1101438 Homework #1

s1093309 作業6