前面的章節我們曾經用到cv2.GaussianBlur
高斯濾波函數做邊緣模糊處理,今天我們就來講一下如何把圖片平滑模糊化吧!
import cv2
import numpy as np
from matplotlib import pyplot as plt
影像平滑模糊化是透過使用低通濾波器進行影像卷積來實現的,當我們在使用濾波器時,會從影像中除去高頻內容,如雜訊、銳利邊緣,也會導致影像邊緣變得模糊,OpenCV主要提供四種平滑模糊化技術:
平均濾波 Averaging:使用 opencv 的 cv2.blur
或 cv2.boxFilter
高斯濾波 Gaussian Filtering:使用 opencv 的 cv2.GaussianBlur
中值濾波 Median Filtering:使用 opencv 的 cv2.medianBlur
雙邊濾波 Bilateral Filtering:使用 opencv 的 cv2.bilateralFilter
我們通常使用平均濾波和高斯濾波兩種類型較多,下面也主要講解這兩種。
平均濾波使用box濾波器進行影像卷積,它計算內核區域下所有像素的平均值,並用該平均值取代中心元素。
img = cv2.imread('image.jpg')
blur = cv2.blur(img, (5, 5))
plt.subplot(121), plt.imshow(img), plt.title('Image')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(blur), plt.title('Blur')
plt.xticks([]), plt.yticks([])
plt.show()
執行上面的程式碼後,可以看見圖片邊緣的銳利感減少了,變得較為模糊,看上去也更為平滑。
平均濾波和高斯濾波的功用其實大致相同,差別只在平均濾波是對圖像像素求平均值然後重新賦值,而高斯濾波是正態分佈,越往中心值越大,越往外則值越小,也就是高斯函數遞減,兩項功能都能做到圖像平滑處理。
img = cv2.imread('image.jpg')
gauss = cv2.GaussianBlur(img, (5, 5), 0)
plt.subplot(121), plt.imshow(img), plt.title('Image')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(gauss), plt.title('Gauss')
plt.xticks([]), plt.yticks([])
plt.show()
以上就是OpenCV常用的兩種模糊處理函式,下章開始要來教大家怎麼用OpenCV進行簡易繪圖。