2014-12-07 25 views
1

我正在使用Python的OpenCV,並在邊緣檢測腳本here我遇到了一些我從未見過的東西。我很抱歉如果這個問題之前已經被問到過,但我不確定要搜索什麼。括號內的Python布爾值?

我已經粘貼了以下相關片:

while True: 
    flag, img = cap.read() 
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
    thrs1 = cv2.getTrackbarPos('thrs1', 'edge') 
    thrs2 = cv2.getTrackbarPos('thrs2', 'edge') 
    edge = cv2.Canny(gray, thrs1, thrs2, apertureSize=5) 
    vis = img.copy() 
    vis /= 2 
    vis[edge != 0] = (0, 255, 0) #This is the line I'm trying to figure out 
    cv2.imshow('edge', vis) 

的代碼是不是我的,但OpenCV的文檔的一部分。盡我所知,vis [edge!= 0]正在經歷每個邊緣元素,將其與真實值進行比較,然後以某種方式(這對我來說是奇怪的部分)將布爾評估的結果轉換爲xy座標vis,然後將圖像值設置爲綠色。

這對我來說似乎有點神奇,因爲我從來沒有遇到過這樣的事情,因爲我大多是C/C++程序員。有人可以指向我可以閱讀的文檔嗎?我有STFW失敗,因爲我不知道該怎麼稱呼這種行爲。

回答

2

vis是numpy的陣列,並且[edge != 0]似乎爲numpy.where()功能語法糖...所以其閾值化用Canny的值,然後繪製vis圖像,其中邊緣上的綠線。

這裏是一個類似的例子。

import numpy as np 
x = np.arange(10) 
y = np.zeros(10) 
print y 
y[x>3] = 10 
print y