[OpenCV基礎][Python]影像模糊化

更新於 2024/10/18閱讀時間約 7 分鐘

在生活中常看到的美圖秀秀美圖修修或者其他圖像編輯軟體,通常使用各種濾波器模糊化技術實現照片修飾和美化效果。這些濾波和模糊化技術可以應用於不同的區域,以改進照片的外觀,包括平滑皮膚去除細節調整對比度等。

本文會介紹 OpenCV 四種影像模糊化的方法 ( blur()GaussianBlur()medianBlur()bilateralFilter() ),經由圖片輸出,理解其應用。


OpenCV中實現影像模糊化的常見方法介紹:

平均模糊(Averaging Blur):

  • 通過將每個像素的值設置為周圍鄰域像素值的平均值來實現。
  • cv2.blur(img, (kernel_size, kernel_size)) 函式實現平均模糊。
    img:輸入圖像。
    (kernel_size, kernel_size):核的大小,表示鄰域的大小。

高斯模糊(Gaussian Blur):

  • 使用高斯函數權重計算每個像素的新值,以達到平滑效果。
  • blurred = cv2.GaussianBlur(img, (kernel_size, kernel_size), sigma) 函式實現高斯模糊。
    img:輸入圖像。
    (kernel_size, kernel_size):高斯核的大小,通常是一個正奇數。越大的核將產生越強的模糊效果。
    sigma:高斯核的標準差。標準差越大,生成的高斯分布越寬,模糊效果越強。

中值模糊(Median Blur):

  • 將每個像素的值設置為鄰域像素值的中值
  • cv2.medianBlur(img, kernel_size) 函式實現中值模糊。
  • img:輸入圖像。
  • kernel_size:核的大小,表示鄰域的大小。

雙邊濾波器(Bilateral Filter):

  • 結合了色彩相似性空間相似性的考慮,可在平滑圖像的同時保留邊緣細節。。
  • bilateral_filtered = cv2.bilateralFilter(img, d, sigmaColor, sigmaSpace) 函式實現雙邊濾波器。
  • img:輸入圖像。
  • d:在濾波過程中考慮的鄰域直徑,越大表示考慮的範圍越廣。
  • sigmaColor:色彩空間中的標準差,控制色彩相似性。
    這個值控制著鄰域中像素之間的色彩差異的容忍度。值越大,更多顏色範圍內的像素會被混合,從而使邊緣區域更模糊。
    效果:較高的 sigmaColor 值允許鄰域中的像素具有較大色彩差異,從而增加模糊程度;而較低的值則意味著只有色彩接近的像素才會被混合,邊緣能夠較好地保持
  • sigmaSpace:空間範圍中的標準差,控制空間相似性。
    用於空間範圍濾波的標準差。這個值決定了距離鄰域中心的像素的權重,控制空間鄰域中的像素的影響。值越大,遠離中心的像素也會參與計算,濾波的效果會更加平滑。
    效果:較大的 sigmaSpace 值將使濾波器考慮鄰域中更遠的像素(即影響更大範圍內的像素);而較小的 sigmaSpace 值則只會考慮鄰近的像素,濾波會更加局部化。



程式範例

平均模糊(Averaging Blur):

平滑皮膚效果,可以增加kernel_size(需奇數)平滑效果會更好喔~

import cv2

img = cv2.imread('imge.jpg')

# 使用 blur 進行平均模糊

kernel_size = (5, 5)
blur = cv2.blur(img, kernel_size)

cv2.imshow('Original Image', img)
cv2.imshow('Averaging blur', blur)
cv2.waitKey(0)
cv2.destroyAllWindows()
皮膚平滑效果

皮膚平滑效果

高斯模糊(Gaussian Blur):

相對於平均模糊,高斯模糊同樣達到平滑效果。但保留了更多的細節。

import cv2

img = cv2.imread('123.jpg')

# 使用 GaussianBlur 進行高斯模糊

kernel_size = (5, 5)
sigma = 0
GaussianBlur = cv2.GaussianBlur(img, kernel_size, sigma)

cv2.imshow('Original Image', img)
cv2.imshow('Averaging blur', GaussianBlur)
cv2.waitKey(0)
cv2.destroyAllWindows()

與平均模糊作比較

高斯與平均模糊作比較

高斯與平均模糊作比較

中值模糊(Median Blur):

與高斯模糊相比細節又相對少一點點,但又比平均模糊細節又多一點。

import cv2

img = cv2.imread('123.jpg')

# 使用 medianBlur 進行中值模糊
kernel_size = 5
medianBlur = cv2.medianBlur(img, kernel_size)

cv2.imshow('Original Image', img)
cv2.imshow('medianBlur', medianBlur)
cv2.waitKey(0)
cv2.destroyAllWindows()
高斯模糊與中值模糊比較

高斯模糊與中值模糊比較

雙邊濾波器(Bilateral Filter):

與中值模糊跟高斯模糊相比,雙邊濾波器在此圖上去躁能力更加好一些,皮膚平滑的效果也比較佳膚色看起來也較為正常,輪廓的邊緣也還行。

色彩相似性:雙邊濾波器能夠保留像素間的色彩相似性。這對於皮膚平滑等任務很重要,因為皮膚區域可能包含多種顏色,保留這些顏色的細節有助於更自然的外觀

空間相似性: 雙邊濾波器同時考慮了空間上的相似性,有助於保留輪廓和邊緣細節。這對於不僅僅是平滑,還要保留圖像整體結構的應用場景更為適合。

import cv2

img = cv2.imread('123.jpg')

# 使用 bilateralFilter 進行雙邊濾波

bilateral_filtered = cv2.bilateralFilter(img, d = 9, sigmaColor = 75, sigmaSpace = 75)

cv2.imshow('Original Image', img)
cv2.imshow('bilateral_filtered', bilateral_filtered)
cv2.waitKey(0)
cv2.destroyAllWindows()
雙邊濾波與中值相比

雙邊濾波與中值相比


總結

選擇模糊化方法應根據應用的具體需求:

  • 平均模糊高斯模糊適用於一般的平滑去噪工作
  • 中值模糊對於去除椒鹽噪聲效果較好。
  • 雙邊濾波器在需要同時保留色彩空間細節的情境中表現較佳

在實際應用中,通常需要進行實驗和比較,選擇最適合的模糊方法,最重要的是圖片模糊化後,有沒有達到自己想要的效果。










avatar-img
128會員
209內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
在影像處理中,我們總是會想把圖像內一些物件的特徵讓它明顯一點,形態學運算就是一個好用強大的工具。 形態學運算是圖像處理中的一個重要概念,用於改善或改變圖像的形狀。在OpenCV中,形態學運算提供了一系列操作,包括開運算、閉運算、禮帽運算和黑帽運算。這些操作通常應用於二值圖像,用於去除噪聲、連接物體
形態學操作在影像處理中有多種應用,特別是在處理二值化影像(黑白影像)。 在影像處理應用上,基本上都由侵蝕,膨脹這兩種方法,組合搭配而成。 常見應用場景 物體檢測與分割: 形態學操作可以用於增強或改善二值化影像中的物體邊界,使得物體的檢測和分割更加準確。
本文將介紹影像的基本操作包括:影像的讀取、顯示、保存,以及一些常見的操作如裁剪、旋轉、縮放等。 語法介紹 讀取影像: cv2.imread函數的參數是影像的檔案路徑。讀取後的影像以NumPy的ndarray形式表示。
OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和影像處理庫,它提供了豐富的功能和工具,可用於開發各種視覺應用程式。 OpenCV最初是用C++編寫的,但它也提供了Python、Java等多種程式語言的接口,方便不同語言的開發者使用。
[影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉
在影像處理中,我們總是會想把圖像內一些物件的特徵讓它明顯一點,形態學運算就是一個好用強大的工具。 形態學運算是圖像處理中的一個重要概念,用於改善或改變圖像的形狀。在OpenCV中,形態學運算提供了一系列操作,包括開運算、閉運算、禮帽運算和黑帽運算。這些操作通常應用於二值圖像,用於去除噪聲、連接物體
形態學操作在影像處理中有多種應用,特別是在處理二值化影像(黑白影像)。 在影像處理應用上,基本上都由侵蝕,膨脹這兩種方法,組合搭配而成。 常見應用場景 物體檢測與分割: 形態學操作可以用於增強或改善二值化影像中的物體邊界,使得物體的檢測和分割更加準確。
本文將介紹影像的基本操作包括:影像的讀取、顯示、保存,以及一些常見的操作如裁剪、旋轉、縮放等。 語法介紹 讀取影像: cv2.imread函數的參數是影像的檔案路徑。讀取後的影像以NumPy的ndarray形式表示。
OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺和影像處理庫,它提供了豐富的功能和工具,可用於開發各種視覺應用程式。 OpenCV最初是用C++編寫的,但它也提供了Python、Java等多種程式語言的接口,方便不同語言的開發者使用。
[影像處理_OpenCV Python]使用Python撰寫影像處理功能,圖片遮罩或濾除掉不要的地方,旋轉圖片 以下範例將呈現影像處理三種不同的應用: 遮罩的實現 濾除 旋轉
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
在樹莓派安裝OpenCV的紀錄。板子是樹莓派3B(沒有+),系統raspbian bullseye 32bit灌到USB隨身碟。
Thumbnail
#安裝 OpenCV 相關套件 pip install opencv-python pip install opencv-contrib-python pip install matplotlib
Haar Cascade classifier OpenCV 官方 Github:https://github.com/opencv/opencv/tree/4.x/data 人臉特徵模型:haarcascade_frontalface_default.xml 資料來源: https://steam
Thumbnail
OpenCV 讀取圖片 原碼:https://reurl.cc/3354ZL 成果: OpenCV 本身有提供讀取圖檔的函數可用,讀取圖檔,只要呼叫 cv2.imread 即可將圖片讀取進來,以 cv2.imread 讀進來的資料,會儲存成一個 NumPy 的陣列。 將圖片讀取進來之後,可使用 c
opencv is use BGR color matplotlib is use RGB color 顯示圖片 opencv matplotlib
Thumbnail
初稿 作者: Stan Ht. Wu (stanwu 吳信典) 想像一下,如果整台電腦裝瀏覽器就好了?這樣多輕鬆啊!人生就是要斷捨離,什麼都不裝,就用瀏覽器就好了,您看連寫方格子的文章也是直接用瀏覽器耶!! 用瀏覽器基本上是最符合懶人原則,為什麼呢?因為從頭到尾根本不需要切換應用程式,存檔案放在雲端
Thumbnail
OpenCart 官方的 3.0.3.7 版於上周釋出,除了修正許多 3.0.x 版累積的小問題,也更新了 twig 套件解決了 PHP 7.4 的相容問題,所以 OpenCart 台灣電商技術團隊,也以 OpenCart 3.0.3.7 版為基礎,加上了在地優化及實用模組,推出台灣優化版。
Thumbnail
綠界科技雖然為 OpenCart 電商系統推出了可直接安裝使用的金流擴充模組,但其設計的模組架構,並不算完全符合 OpenCart 金流模組的架構規則,包含後臺編輯不同付款方式時的設定,無法獨立分開設定,前台的金流選擇,更是被設計成兩段式的模式,非常不符合台灣消費者慣用的習性。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
在樹莓派安裝OpenCV的紀錄。板子是樹莓派3B(沒有+),系統raspbian bullseye 32bit灌到USB隨身碟。
Thumbnail
#安裝 OpenCV 相關套件 pip install opencv-python pip install opencv-contrib-python pip install matplotlib
Haar Cascade classifier OpenCV 官方 Github:https://github.com/opencv/opencv/tree/4.x/data 人臉特徵模型:haarcascade_frontalface_default.xml 資料來源: https://steam
Thumbnail
OpenCV 讀取圖片 原碼:https://reurl.cc/3354ZL 成果: OpenCV 本身有提供讀取圖檔的函數可用,讀取圖檔,只要呼叫 cv2.imread 即可將圖片讀取進來,以 cv2.imread 讀進來的資料,會儲存成一個 NumPy 的陣列。 將圖片讀取進來之後,可使用 c
opencv is use BGR color matplotlib is use RGB color 顯示圖片 opencv matplotlib
Thumbnail
初稿 作者: Stan Ht. Wu (stanwu 吳信典) 想像一下,如果整台電腦裝瀏覽器就好了?這樣多輕鬆啊!人生就是要斷捨離,什麼都不裝,就用瀏覽器就好了,您看連寫方格子的文章也是直接用瀏覽器耶!! 用瀏覽器基本上是最符合懶人原則,為什麼呢?因為從頭到尾根本不需要切換應用程式,存檔案放在雲端
Thumbnail
OpenCart 官方的 3.0.3.7 版於上周釋出,除了修正許多 3.0.x 版累積的小問題,也更新了 twig 套件解決了 PHP 7.4 的相容問題,所以 OpenCart 台灣電商技術團隊,也以 OpenCart 3.0.3.7 版為基礎,加上了在地優化及實用模組,推出台灣優化版。
Thumbnail
綠界科技雖然為 OpenCart 電商系統推出了可直接安裝使用的金流擴充模組,但其設計的模組架構,並不算完全符合 OpenCart 金流模組的架構規則,包含後臺編輯不同付款方式時的設定,無法獨立分開設定,前台的金流選擇,更是被設計成兩段式的模式,非常不符合台灣消費者慣用的習性。