2017-11-11 72 views
2

我有一個以彩色曲線爲特徵的圖像。從numpy圖像中提取彩色線條

我想爲每一行提取曲線較高像素的索引。

此代碼的工作,但速度很慢(f的圖像,magic是線條顏色的RGB代碼):

res = f.shape[0] 
magic = 146, 47, 6 
return [min(l for l in range(res) if np.array_equal(magic, f[l, c, :3])) for c in range(res)] 

我如何做同樣的事情更快?

回答

2

沿着每一行即最後一個軸與magic元素進行比較。這給了我們一個2D掩碼。

mask = (f == magic).all(-1) 

因爲,我們終於做min(l),這將意味着在遮片陣列找到第一個True的索引。所以,如果有至少一個保證的比賽,我們可以使用argmax獲得第一場比賽的指數,像這樣 -

(f == magic).all(-1).argmax(0) 
+0

argmax返回標所以這是行不通的。 – Labo

+0

我發現了一個技巧:'(f [:,:,:3] == magic).all(axis = -1).argmax(0)' – Labo

+0

argmax需要的第一個索引是true,所以它返回如預期的那樣! – Labo