2

我正在學習計算機視覺。我對Canny邊緣檢測器的部分非常困惑。可以在OpenCV中處理單通道灰度圖像或3通道彩色圖像嗎?

當我嘗試生成一個顏色圖像由canny在OpenCV。我有一些疑問。

這裏是我試過的代碼。

def auto_canny(image, sigma=0.33): 
    v = np.median(image) 
    lower = int(max(0, (1.0 - sigma) * v)) 
    upper = int(min(255, (1.0 + sigma) * v)) 
    edged = cv2.Canny(image, lower, upper) 

然後,

##### first situation ##### 
img = cv2.imread('mango.jpg') 
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
auto = auto_canny(gray) 
cv2.imwrite('mango_gray_edge.jpg', auto) 
在這種情況下

,我得到了這樣一個形象: enter image description here

##### second situation ##### 
img = cv2.imread('mango.jpg') 
auto = auto_canny(img) 
cv2.imwrite('mango_color_edge.jpg', auto) 

在這種情況下,我得到了這樣一個形象: enter image description here

這是原始inal image:i.stack.imgur.com/45TAU.jpg(抱歉,我沒有足夠的聲望發佈超過2個鏈接...)

第一種情況和第二種情況的不同之處在於是否我將彩色圖像轉換爲灰度圖像。 但是,我對此感到困惑。因爲,

在第一種情況下,我將圖像轉換爲灰度,所以圖像是單通道圖像。在第二種情況下,圖像仍然是三個頻道。

當我沒有像第二種情況那樣將其轉換爲灰度圖像時,邊緣更好。

所以我的問題是,

1)是否精明的功能包括OpenCV的方法來轉換圖像爲灰度?我的意思是,我需要將圖像轉換爲灰度之前,我使用cv2.Canny()

2)爲什麼canny可以處理單通道(第一種情況轉換爲灰度)和三個通道(原始圖像像第二種情況)圖像在同一時間?

3)canny如何工作?可以直接處理彩色圖像,還是必須先將彩色圖像轉換爲灰度圖像?

4)從canny的步驟,當我們計算梯度時,我認爲它應該是單通道,那麼它可以被計算。如果圖像是包含三個通道的彩色圖像,我們如何計算梯度?我們是否分別計算三個通道?如何運作?

回答

2

是的,OpenCV的Canny實現可以處理多個通道。


請記住,OpenCV是開源的,所以你可以檢查實現以找到這種信息。

基本上,Canny在非極大值抑制之前根據索貝爾導數(dxdy)計算每個像素的梯度大小(norm)。 如果您有多個通道,您可以看到in the source code,給定像素的梯度幅度在所有ch通道中最高。

+0

它可以處理彩色圖像?他們是什麼時候做的?我的書說Canny只能處理灰度。 – Rich

相關問題