OpenCV (cv2) là thư viện xử lý ảnh mạnh. Gaussian Blur làm mượt ảnh, giảm nhiễu, giữ cạnh tốt hơn blur trung bình.
Cú pháp cv2.GaussianBlur()
dst = cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])
src: Ảnh đầu vào.ksize: Kích thước kernel (width, height) - phải là số lẻ dương (3,3), (5,5), (7,7)...sigmaX: Độ lệch chuẩn theo trục X. Nếu 0, tính từ ksize.sigmaY: Độ lệch chuẩn theo trục Y. Mặc định = sigmaX.borderType: Xử lý biên (mặc định BORDER_DEFAULT).
Ví dụ cơ bản
import cv2
import numpy as np
src = cv2.imread('LionKing.jpeg', cv2.IMREAD_UNCHANGED)
# Kernel 3x3
dst = cv2.GaussianBlur(src, (3, 3), cv2.BORDER_DEFAULT)
# Hiển thị song song
cv2.imshow("Gaussian Blur", np.hstack((src, dst)))
cv2.waitKey(0)
cv2.destroyAllWindows()
Kết quả so sánh kernel size
| Kernel | Hiệu ứng |
|---|---|
| (3, 3) | Làm mượt nhẹ, giữ chi tiết |
| (13, 13) | Mờ rõ rệt, mất chi tiết nhỏ |
| (31, 31) | Rất mờ, gần như khối màu |

Các phương pháp blur khác trong OpenCV
| Hàm | Đặc điểm |
|---|---|
cv2.blur() / cv2.boxFilter() | Average blur (box filter) - nhanh, nhưng tạo artifact vuông |
cv2.GaussianBlur() | Gaussian kernel - tự nhiên, giữ cạnh tốt |
cv2.medianBlur() | Median filter - tốt cho noise "salt & pepper" |
cv2.bilateralFilter() | Bilateral - giữ cạnh cực tốt, chậm hơn |
Ví dụ so sánh nhiều loại blur
import cv2
import numpy as np
img = cv2.imread('noisy_image.jpg')
avg = cv2.blur(img, (5, 5))
gauss = cv2.GaussianBlur(img, (5, 5), 0)
median = cv2.medianBlur(img, 5)
bilateral = cv2.bilateralFilter(img, 9, 75, 75)
cv2.imshow('Original', img)
cv2.imshow('Average', avg)
cv2.imshow('Gaussian', gauss)
cv2.imshow('Median', median)
cv2.imshow('Bilateral', bilateral)
cv2.waitKey(0)
cv2.destroyAllWindows()
Ứng dụng thực tế
- Tiền xử lý trước edge detection (Canny), threshold.
- Giảm noise sensor camera.
- Tạo hiệu ứng depth of field (blur background).
- Anonymize khuôn mặt/biển số (kết hợp detect + blur ROI).