s1091530 作業6
1. 開發環境
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。
留言
張貼留言