iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 13
1

前面的章節我們曾經用到cv2.GaussianBlur高斯濾波函數做邊緣模糊處理,今天我們就來講一下如何把圖片平滑模糊化吧!

import cv2
import numpy as np
from matplotlib import pyplot as plt

影像平滑模糊化是透過使用低通濾波器進行影像卷積來實現的,當我們在使用濾波器時,會從影像中除去高頻內容,如雜訊、銳利邊緣,也會導致影像邊緣變得模糊,OpenCV主要提供四種平滑模糊化技術:

平均濾波 Averaging:使用 opencv 的 cv2.blurcv2.boxFilter
高斯濾波 Gaussian Filtering:使用 opencv 的 cv2.GaussianBlur
中值濾波 Median Filtering:使用 opencv 的 cv2.medianBlur
雙邊濾波 Bilateral Filtering:使用 opencv 的 cv2.bilateralFilter

我們通常使用平均濾波和高斯濾波兩種類型較多,下面也主要講解這兩種。

平均濾波 Averaging

平均濾波使用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()

執行上面的程式碼後,可以看見圖片邊緣的銳利感減少了,變得較為模糊,看上去也更為平滑。

高斯濾波 Gaussian Filtering

平均濾波和高斯濾波的功用其實大致相同,差別只在平均濾波是對圖像像素求平均值然後重新賦值,而高斯濾波是正態分佈,越往中心值越大,越往外則值越小,也就是高斯函數遞減,兩項功能都能做到圖像平滑處理。

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進行簡易繪圖。


上一篇
Day12-影像二值化
下一篇
Day14-畫圓
系列文
OpenCV 從零開始的影像處理30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言