Python | OpenCV 圖片的馬賽克與羽化效果
📚 前言
在前一篇我們學會了 圖片的侵蝕與膨脹(形態學操作),能夠去除雜訊並強化影像結構。
這一篇要介紹兩個常見的圖片處理技巧:馬賽克(Mosaic) 與 羽化(Feather/Blur)。
馬賽克常用於隱藏敏感資訊或人臉,羽化則能讓圖片邊緣更柔和,提升美觀度。
💡 補充說明:這篇開始,不再提供「使用 PyCharm 建立程式 → 帶入程式碼 → 執行結果」的動態 GIF 示範,改為直接提供 結果圖片,讓文章更精簡,讀者也能快速對照程式碼與效果。
🧩 馬賽克效果(Mosaic)
原理說明
馬賽克的原理很簡單:
- 縮小圖片 → 把圖片縮小到原來的 1/10 或 1/15 大小,細節就會消失。
- 再放大回原尺寸 → 用「最近鄰插值」(Nearest Neighbor) 放大,像素會被拉大成一格格。
- 結果 → 就會呈現格子狀的馬賽克效果。
👉 簡單來說:馬賽克就是「縮小再放大」,縮小比例決定格子大小,比例越大格子越粗。
💻 範例程式:整張圖片馬賽克
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")
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
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")
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")
x, y, w, h = 80, 90, 190, 120 roi = img[y:y+h, x:x+w]
feather = cv2.GaussianBlur(roi, (25, 25), 30)
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