Like Share Discussion Bookmark Smile

J.J. Huang   2026-01-29   Python OpenCV 03.圖片處理篇:基礎技巧   瀏覽次數:次   DMCA.com Protection Status

Python | OpenCV 圖片的馬賽克與羽化效果

📚 前言

在前一篇我們學會了 圖片的侵蝕與膨脹(形態學操作),能夠去除雜訊並強化影像結構。
這一篇要介紹兩個常見的圖片處理技巧:馬賽克(Mosaic)羽化(Feather/Blur)
馬賽克常用於隱藏敏感資訊或人臉,羽化則能讓圖片邊緣更柔和,提升美觀度。

💡 補充說明:這篇開始,不再提供「使用 PyCharm 建立程式 → 帶入程式碼 → 執行結果」的動態 GIF 示範,改為直接提供 結果圖片,讓文章更精簡,讀者也能快速對照程式碼與效果。

🧩 馬賽克效果(Mosaic)

原理說明

馬賽克的原理很簡單:

  1. 縮小圖片 → 把圖片縮小到原來的 1/10 或 1/15 大小,細節就會消失。
  2. 再放大回原尺寸 → 用「最近鄰插值」(Nearest Neighbor) 放大,像素會被拉大成一格格。
  3. 結果 → 就會呈現格子狀的馬賽克效果。

👉 簡單來說:馬賽克就是「縮小再放大」,縮小比例決定格子大小,比例越大格子越粗。

💻 範例程式:整張圖片馬賽克

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import cv2

# 讀取圖片
img = cv2.imread("test.png")

# 設定縮小比例 (數字越大,馬賽克格子越粗)
level = 15

# 計算縮小後的高度與寬度
h = img.shape[0] // level
w = img.shape[1] // level

# 先縮小圖片 (細節消失)
mosaic = cv2.resize(img, (w, h), interpolation=cv2.INTER_LINEAR)

# 再放大回原尺寸 (像素被放大成格子狀)
mosaic = cv2.resize(mosaic, (img.shape[1], img.shape[0]), interpolation=cv2.INTER_NEAREST)

# 顯示結果
cv2.imshow("Mosaic Whole Image", mosaic)
cv2.waitKey(0)
cv2.destroyAllWindows()


圖:程式碼執行結果 — 整張圖片馬賽克

💻 範例程式:指定區域馬賽克(ROI)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import cv2

# 讀取圖片
img = cv2.imread("test.png")

# 定義 ROI 區域 (x, y, w, h)
# x, y 是左上角座標;w, h 是寬與高
x, y, w, h = 80, 90, 190, 120
roi = img[y:y+h, x:x+w]

# 設定縮小比例 (數字越大,馬賽克格子越粗)
level = 15
h_roi = h // level
w_roi = w // level

# 對 ROI 區域先縮小再放大
mosaic = cv2.resize(roi, (w_roi, h_roi), interpolation=cv2.INTER_LINEAR)
mosaic = cv2.resize(mosaic, (w, h), interpolation=cv2.INTER_NEAREST)

# 把馬賽克區域替換回原圖
img[y:y+h, x:x+w] = mosaic

# 顯示結果
cv2.imshow("Mosaic ROI", img)
cv2.waitKey(0)
cv2.destroyAllWindows()


圖:程式碼執行結果 — 指定區域馬賽克(ROI)

🎨 羽化效果(Feather / Blur)

原理說明

羽化的原理是利用模糊濾波器(如 Gaussian Blur)讓邊緣過渡更柔和。
常用於圖片合成、美化,或是讓局部區域看起來更自然。

回顧OpenCV 基本濾波與模糊效果

💻 範例程式:整張圖片羽化

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

# 讀取圖片
img = cv2.imread("test.png")

# 使用高斯模糊 (Gaussian Blur) 對整張圖片進行羽化
# (25, 25) 是模糊核大小,必須為奇數;數字越大模糊越強
# 30 是標準差 (sigma),控制模糊程度
feather = cv2.GaussianBlur(img, (25, 25), 30)

# 顯示結果
cv2.imshow("Feather Whole Image", feather)
cv2.waitKey(0)
cv2.destroyAllWindows()


圖:程式碼執行結果 — 整張圖片羽化

💻 範例程式:指定區域羽化(ROI)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import cv2

# 讀取圖片
img = cv2.imread("test.png")

# 定義 ROI 區域 (x, y, w, h)
# x, y 是左上角座標;w, h 是寬與高
x, y, w, h = 80, 90, 190, 120
roi = img[y:y+h, x:x+w]

# 對 ROI 區域進行高斯模糊 (羽化效果)
feather = cv2.GaussianBlur(roi, (25, 25), 30)

# 把羽化後的 ROI 替換回原圖
img[y:y+h, x:x+w] = feather

# 顯示結果
cv2.imshow("Feather ROI", img)
cv2.waitKey(0)
cv2.destroyAllWindows()


圖:程式碼執行結果 — 指定區域羽化(ROI)

📊 效果比較

效果名稱 原理說明 常見用途
馬賽克 縮小再放大,像素格子化 隱藏人臉、隱私資訊
羽化 模糊邊緣,柔化過渡 美化圖片、合成效果

⚠️ 注意事項

  • 馬賽克:縮小比例越大,格子越粗;比例太小則效果不明顯。
  • 羽化:模糊核大小需為奇數(如 25x25),數值越大效果越柔和。
  • ROI 區域:務必正確選擇,否則可能覆蓋錯誤位置。
  • 效能考量:大範圍模糊或馬賽克可能增加計算時間。

🎯 結語

這一篇我們學會了 馬賽克與羽化效果,能夠隱藏敏感資訊或讓圖片邊緣更柔和。這些技巧在影像處理、隱私保護與美化設計中都非常常見。

在下一篇,我們將進一步探索 繪製直線、矩形、圓形,學習如何在圖片上加入基本圖形,為後續的標註與合成打下基礎。

📖 如在學習過程中遇到疑問,或是想了解更多相關主題,建議回顧一下 Python | OpenCV 系列導讀,掌握完整的章節目錄,方便快速找到你需要的內容。

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