Like Share Discussion Bookmark Smile

J.J. Huang   2026-01-10   Python OpenCV 02.入門篇:基礎操作   瀏覽次數:次   DMCA.com Protection Status

Python | OpenCV 影像儲存與格式轉換

📚 前言

在上一章我們學會了如何讀取與顯示圖片。
這一篇要進一步學習 影像儲存與格式轉換,這是影像處理的基本操作之一。

💾 儲存影像

OpenCV 提供 cv2.imwrite() 來儲存影像。官方文件

語法:

1
cv2.imwrite(filename, img[, params])
  • filename:檔案路徑與名稱(副檔名決定輸出格式)。
  • img:要儲存的影像(NumPy 陣列)。
  • params:非必填,壓縮品質或其他設定。

🔄 格式轉換

只要改副檔名,就能轉換格式:

1
2
3
4
5
6
7
8
import cv2

img = cv2.imread("test.png")

# 儲存為不同格式
cv2.imwrite("output.jpg", img) # JPG
cv2.imwrite("output.png", img) # PNG
cv2.imwrite("output.bmp", img) # BMP

常見格式:

  • JPG:有壓縮,檔案小,但可能失真。
  • PNG:無損壓縮,支援透明度。
  • BMP:未壓縮,檔案大。


圖:將 PNG 轉換為 JPG、BMP 的效果

⚙️ 壓縮品質設定

不同格式支援不同的壓縮參數:

  • JPG:可設定壓縮品質(0–100,數字越高品質越好,檔案越大)。
  • PNG:可設定壓縮等級(0–9,數字越高壓縮率越高,速度越慢)。

範例:

1
2
3
4
5
# 儲存高品質 JPG
cv2.imwrite("high_quality.jpg", img, [cv2.IMWRITE_JPEG_QUALITY, 95])

# 儲存高壓縮 PNG
cv2.imwrite("compressed.png", img, [cv2.IMWRITE_PNG_COMPRESSION, 9])

🛠️ 範例程式:影像儲存與格式轉換

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import cv2

img = cv2.imread("test.png")

# 儲存為不同格式
cv2.imwrite("output.jpg", img)
cv2.imwrite("output.png", img)
cv2.imwrite("output.bmp", img)

# 儲存高品質 JPG
cv2.imwrite("output_high.jpg", img, [cv2.IMWRITE_JPEG_QUALITY, 95])

# 儲存高壓縮 PNG
cv2.imwrite("output_compressed.png", img, [cv2.IMWRITE_PNG_COMPRESSION, 9])


圖:不同壓縮品質的 JPG 與 PNG 儲存結果

🖼️ 從 NumPy 陣列生成圖片

除了讀取現有圖片,也能直接用 NumPy 建立影像矩陣,再用 imwrite() 儲存:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import cv2
import numpy as np

# 建立黑色背景
img = np.zeros((500, 500, 3), dtype="uint8")

# 在中間畫一個紅色方塊
img[150:350, 150:350] = [0, 0, 255]

# 儲存圖片
cv2.imwrite("red_square.jpg", img)

# 顯示圖片
cv2.imshow('red_square', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

👉 這樣就能快速生成一張 500×500 的黑底紅方塊圖片。


圖:使用 NumPy 建立黑底紅方塊並儲存

⚠️ 注意事項

  • 副檔名決定格式imwrite() 會依檔名副檔名決定輸出格式。
  • 顏色通道:OpenCV 使用 BGR,不是 RGB。
  • 壓縮參數:不同格式支援的參數不同,詳細可查 ImwriteFlags

結語 🎯

這一篇我們學會了如何使用 cv2.imwrite() 儲存影像,並進行格式轉換與壓縮設定。
下一篇將進入 影片讀取與播放,學習如何處理動態影像。


註:以上參考了
OpenCV Tutorials
OpenCV-Python Tutorials