close

Canny函式:

cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]]) 

主要參數設置如下:

● image: 輸入影像

● threshold1: 參數為最小門檻值

● threshold2: 參數為最大門檻值

可設也可不設的參數如下:

● apertureSize: 參數預設為3, 也就是設置Sobel運算元的大小

● L2gradient: 參數為一個布林值, 如果是Ture, 則使用更精確的L2範數進行計算 (即兩個方向的導數的平方和在開方), 否則使用L1範數 (直接將兩個方向導數的絕對值相加)

 

※注意※

Canny只能處理灰階影像,

輸出結果為binary image(黑白影像, 或稱二值化影像),

其中包含偵測出來的邊緣結果

 

範例1:

import cv2
import numpy as np

img = cv2.imread('test.jpg', 0) #用灰階模式讀取RGB影像 
edges = cv2.Canny(img, 100, 200)
cv2.imwrite('Canny_result.jpg', edges)

 

上圖為原圖, 下圖為測試結果:

 

如果將上面範例1的Canny參數做修改如下:

edges = cv2.Canny(img, 30, 100)

參數大小將影響偵測到的邊緣結果,

如下圖:

 

範例2:

加入GaussianBlur方法來降低雜訊值

import cv2
import numpy as np

img = cv2.imread('test.jpg', 0)
img = cv2.GaussianBlur(img, (3,3), 0)
edges = cv2.Canny(img, 30, 100)
cv2.imwrite('Canny_result.jpg', edges)

結果如下:

 

※查詢其他OpenCV用法如下※

OpenCV應用總整理: 點擊我

arrow
arrow
    創作者介紹
    創作者 楓綺 的頭像
    楓綺

    K_程式人

    楓綺 發表在 痞客邦 留言(0) 人氣()