s1083319 作業6
題目敘述
附件中為三張利用將晶片高度以色彩視覺化後的圖片。
請設計一個基於 Run-Length 的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。
部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率
(compression ratio)。
開發環境
l Windows 11
l Visual
Studio Code
l Python 3.11
l OpenCV
4.7.0.72
Import
l cv2
l os
l PIL 的 Image
功能說明
1. 讀取影像
bmp_image = Image.open(image_path)
src = list(bmp_image.getdata())
2. 計算原圖長寬
imgSize1 = bmp_image.size[0] * bmp_image.size[1]
3. 切割BGR Channel到另一張img
splitBGR2IMG()#自訂
方法:
原圖:
255 |
28 |
0 |
255 |
28 |
0 |
255 |
28 |
0 |
255 |
27 |
0 |
255 |
27 |
0 |
255 |
27 |
0 |
切割完:
255 |
255 |
255 |
255 |
255 |
255 |
28 |
28 |
28 |
26 |
26 |
26 |
0 |
0 |
0 |
0 |
0 |
0 |
4. 用RLE的方式壓縮BMP圖像
前後一樣count++
前後不同就存入(pixel, count)
5. 寫入RLE圖像
with open(output_file, "w") as file:
for pixel,
count in imgEncoded:
file.write(f"{pixel},{count}\n")
6. 計算並印出壓縮率
先讀取
original_size =
os.path.getsize("")
compressed_size =
os.path.getsize("")
後計算
ratio = (original_size /
compressed_size) * 100
執行結果
Hw06
img1.jpg
原圖
壓縮後
img2.jpg
原圖
壓縮後
img3.jpg
原圖
壓縮後
留言
張貼留言