還是請我們的貓貓助教來幫忙XDDDD
Day16_高斯模糊找輪廓_GaussianBlur_Canny.ipynb
基本修圖技能學習完之後,
再來我們要來學一些比較進階會使用的修圖技巧囉!
今天我們會來測試兩張圖片!
首先我們先建立比較好理解的較簡單圖片。
shape = (200, 200, 3)
origin_img = np.zeros(shape, np.uint8)
origin_img = draw_cirlces(origin_img, circle_mid=(50,50), color=(0,255,0) ,radius=30)
origin_img = draw_cirlces(origin_img, circle_mid=(50,150), color=(255,255,0) ,radius=27)
origin_img = draw_cirlces(origin_img, circle_mid=(100,100), color=(255,0,255) ,radius=23)
origin_img = draw_cirlces(origin_img, circle_mid=(150,60), color=(255,0,0) ,radius=25)
origin_img = draw_cirlces(origin_img, circle_mid=(150,150), color=(0,0,255) ,radius=21)
origin_img = draw_cirlces(origin_img, circle_mid=(120,35), color=(0,255,255) ,radius=18)
origin_img = draw_cirlces(origin_img, circle_mid=(110,150), color=(255,255,255) ,radius=40)
print("origin picture:")
show_img(origin_img)
其實上面的程式幾乎都只是在為這張範例圖片畫圓而已...
不用想得太複雜哈哈哈哈
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # start from BGR -> gray
因為彩色的圖片有三個顏色通道需要處理,
但我們今天只需要找到輪廓,用一個通道即可,
這樣能使得我們在運算上不會到太複雜,
因此我們會先將圖片轉成灰階。
# 高斯模糊(高斯平滑),與計算核心大小
def do_GaussianBlur(gray):
kernel_size = 5
blur_gray = cv2.GaussianBlur(gray,(kernel_size, kernel_size), 0)
return blur_gray
高斯模糊(又稱高斯平滑),正如他的名字,就是我們將圖片模糊化,kernel_size
是我們進行運算時,對於多大範圍的圖片進行運算。
簡單可以理解為:我們如果對 5x5 的
kernel_size
運算,
那圖片每一個 5x5 的中心受到高斯模糊的影響會最大
算出來就會是一張比較模糊的圖片。
(看得出來有比較模糊吧哈哈哈哈哈)
Q: 為什麼要模糊?
A: 因為先做高斯模糊(或說經過高斯平滑)的圖片能夠去除很多圖片的噪聲(雜訊),
更容易讓我們找到更精準的輪廓。
# Canny邊緣運算
def do_Canny(blur_gray):
low_threshold = 1
high_threshold = 90
edges = cv2.Canny(blur_gray, low_threshold, high_threshold)
return edges
其中有兩個參數需要自己依情況調整,
我們知道灰階圖片的值介於 0~255
之間,
情況有三種:
high_threshold
: 為 strong edge
,我們直接保留low_threshold
與 high_threshold
: 為 weak edge
,weak edge
是否能與 strong edge
相連,low_threshold
: 我們都不當作 edge我們來看看貓貓的圖跑上面的流程會發生什麼事情~
我們設定 low_threshold = 10、high_threshold = 90
的時候
我們設定 low_threshold = 1、high_threshold = 10
的時候
(有一種素描畫的感覺?)
low_threshold, high_threshold
,我們會依據使用情境不同調整參數,
達到自己需要的效果。
https://ask.csdn.net/questions/706468
https://www.kancloud.cn/aollo/aolloopencv/269599
https://chtseng.wordpress.com/2016/12/05/opencv-edge-detection%E9%82%8A%E7%B7%A3%E5%81%B5%E6%B8%AC/
https://medium.com/@pomelyu5199/canny-edge-detector-%E5%AF%A6%E4%BD%9C-opencv-f7d1a0a57d19