很實用的技能,建議學起來。一行指令就搞定了。好強的 OpenCV
如果還沒有安裝opencv 請服用下面的指令:
python3 -m pip install opencv-python
影象平滑技術如高斯模糊,Median模糊等,模糊真的很好用,因為模糊捨棄了「細節」,再結合二值化(Image Thresholding),就可以讓原有的資訊變的更圓潤和飽滿,可以做出反鋸齒(Anti-aliasing)的效果。
OpenCV 的平滑模糊化技術:
平均濾波 Averaging
:使用 opencv 的 cv2.blur 或 cv2.boxFilter高斯濾波 Gaussian Filtering
:使用 opencv 的 cv2.GaussianBlur中值濾波 Median Filtering
:使用 opencv 的 cv2.medianBlur雙邊濾波 Bilateral Filtering
:使用 opencv 的 cv2.bilateralFilter
使用範例:
import cv2 import numpy as np img = cv2.imread('opencv-logo-white.png') blur = cv2.blur(img,(5,5))
二值化
影像二值化簡單的方法,如果像素值pixel大於門檻值threshold,就指定一個新數值(例如白色),否則就指定另一個新數值(例如黑色),
這邊使用 opencv 的 cv2.threshold,第一個參數來源需要是灰階影像,第二個參數是用來對像素值進行分類的門檻值,第三個參數為最大灰階值,第四個參數為二值化的類型如下所示:cv2.THRESH_BINARY
:Threshold Binary,即二值化,將大於門檻值的灰階值設為最大灰階值,小於門檻值的值設為0。cv2.THRESH_BINARY_INV
:Threshold Binary, Inverted,將大於門檻值的灰階值設為0,其他值設為最大灰階值。cv2.THRESH_TRUNC
:Truncate,將大於門檻值的灰階值設為門檻值,小於門檻值的值保持不變。cv2.THRESH_TOZERO
:Threshold to Zero,將小於門檻值的灰階值設為0,大於門檻值的值保持不變。cv2.THRESH_TOZERO_INV
:Threshold to Zero, Inverted,將大於門檻值的灰階值設為0,小於門檻值的值保持不變。
使用範例:
import cv2 import numpy as np img = cv2.imread('your-image.png', 0) ret, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
執行結果
1:使用 Blur + threshold
右邊是原圖,右邊是套用效果後。
2:使用 GaussianBlur + threshold
右邊是原圖,右邊是套用效果後。
3:使用 medianBlur + threshold
右邊是原圖,右邊是套用效果後。
心得,使用起來差異不會很大,但Blur 可以調的模糊程度會較高,較大的筆觸會造成較嚴重的暈染效果,還有筆畫相連。先降噪,blur ,再降噪,再取二值化,這些步驟重覆並交叉套用,效果也很好!
相關文章
Smoothing Images
https://docs.opencv.org/4.5.2/d4/d13/tutorial_py_filtering.html
影像平滑模糊化 blur
https://shengyu7697.github.io/python-opencv-blur/
影像二值化 Image Thresholding
https://shengyu7697.github.io/python-opencv-threshold/
opencv python 影像去噪
https://stackoverflow.max-everyday.com/2021/07/opencv-python-image-denoise/