影像平滑與模糊化(Image Smoothing / Blurring)是影像處理中常見的操作,
主要用於降低影像中的雜訊(Noise)、柔化影像邊緣,以及產生特效。
OpenCV 提供多種模糊方式,其中常用的有:
準備一張圖片 image.jpg
,放在與程式同一個資料夾中。
import cv2
img = cv2.imread("image.jpg")
cv2.imshow("Original", img)
# 放最後面
cv2.waitKey()
cv2.destroyAllWindows()
cv2.blur(src, ksize)
將影像中每個像素的值替換為鄰域(Kernel)中所有像素的平均值。
這種方式簡單快速,但可能會造成邊緣細節的明顯喪失。
(5,5)
表示 5x5 區域取平均)# 均值模糊
blur_img1 = cv2.blur(img, (5, 5))
blur_img2 = cv2.blur(img, (10, 50))
blur_img3 = cv2.blur(img, (50, 10))
blur_img4 = cv2.blur(img, (100, 100))
cv2.imshow("Average Blur 1", blur_img1)
cv2.imshow("Average Blur 2", blur_img2)
cv2.imshow("Average Blur 3", blur_img3)
cv2.imshow("Average Blur 4", blur_img4)
顯示的圖片如下:
均質模糊 5x5
均質模糊 10x50 與 50x10(可觀察水平與垂直方向差異)
均質模糊 100x100
📌 觀察:模糊盒越大,影像越模糊。
cv2.GaussianBlur(src, ksize, sigmaX)
與均值模糊不同,高斯模糊的權重遵循高斯分佈,越靠近中心的像素權重越大,
因此在保留邊緣細節的同時能更有效地去除雜訊。
ksize
自動計算)# 高斯模糊
gaussian_img1 = cv2.GaussianBlur(img, (3, 3), 0)
gaussian_img2 = cv2.GaussianBlur(img, (5, 5), 0)
gaussian_img3 = cv2.GaussianBlur(img, (7, 7), 0)
gaussian_img4 = cv2.GaussianBlur(img, (3, 3), 5)
gaussian_img5 = cv2.GaussianBlur(img, (5, 5), 5)
gaussian_img6 = cv2.GaussianBlur(img, (7, 7), 5)
cv2.imshow("Gaussian Blur 1 | (3, 3) sigmaX = 0", gaussian_img1)
cv2.imshow("Gaussian Blur 2 | (5, 5) sigmaX = 0", gaussian_img2)
cv2.imshow("Gaussian Blur 3 | (7, 7) sigmaX = 0", gaussian_img3)
cv2.imshow("Gaussian Blur 4 | (3, 3) sigmaX = 5", gaussian_img4)
cv2.imshow("Gaussian Blur 5 | (5, 5) sigmaX = 5", gaussian_img5)
cv2.imshow("Gaussian Blur 6 | (7, 7) sigmaX = 5", gaussian_img6)
顯示的圖片如下:
在 cv2.GaussianBlur(img, (5, 5), 0)
中:
(5, 3)
→ 水平方向核寬 5,垂直方向核高 3sigmaX = 0
→ 自動根據核大小計算標準差sigmaX
可加強或減弱模糊效果常用核大小:
(3, 3)
→ 輕微模糊(5, 5)
→ 中等模糊(7, 7)
→ 模糊更明顯cv2.medianBlur(src, ksize)
將鄰域像素排序後取中間值作為新的像素值,
對於去除「椒鹽雜訊(Salt & Pepper Noise)」特別有效。
# 中值模糊
median_img = cv2.medianBlur(img, 5)
cv2.imshow("Median Blur", median_img)
顯示的圖片如下:
# 一次比較三種模糊效果
blur_img = cv2.blur(img, (5, 5))
gaussian_img = cv2.GaussianBlur(img, (5, 5), 0)
median_img = cv2.medianBlur(img, 5)
cv2.imshow("Original", img)
cv2.imshow("Average Blur", blur_img)
cv2.imshow("Gaussian Blur", gaussian_img)
cv2.imshow("Median Blur", median_img)
cv2.waitKey()
cv2.destroyAllWindows()
顯示的圖片如下:
在影像前處理與特效製作中,選擇合適的模糊方法能達到不同的效果。