簡體   English   中英

替換閾值以上的所有 rgb 值

[英]Replace all rgb values above a threshold

我有一個充滿 RGB 值的 numpy 3 d 數組,例如 shape = (height,width,3)

  matrix = np.array( [[[0,0.5,0.6],[0.9,1.2,0]])

如果任何值高於閾值,我必須替換 RGB 值,例如閾值 = 0.8,替換 = [2,2,2] 然后

matrix = [[[0,0.5,0.6],[2,2,2]]

我怎樣才能用 numpy 以有效的方式做到這一點? 目前我正在使用雙循環並檢查是否有任何 rgb 值高於閾值,我將其替換,但是對於 n = 4000 數組來說這很慢。

我如何使用 numpy 更有效地做到這一點,也許是 np.where ?

我已經通過另一個width維度擴展了你的矩陣。

matrix = np.array([[[0,0.5,0.6],[0.9,1.2,0]],[[0,0.5,0.6],[0.9,1.2,0]]])

您可以通過在軸 2 上使用np.any構建掩碼(從 0 開始,因此是第三軸):

mask = np.any((matrix > 0.8), axis=2)

# mask:
array([[False,  True],
       [False,  True]], dtype=bool)

matrix[mask] = np.array([2,2,2])

你得到的matrix

array([[[ 0. ,  0.5,  0.6],
        [ 2. ,  2. ,  2. ]],

       [[ 0. ,  0.5,  0.6],
        [ 2. ,  2. ,  2. ]]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM