2017-10-14 39 views
0

我有2個BGR圖像。一個大多是黑色的。我想要將所有黑色像素設置爲其他圖像的像素。如何在黑色時將BGR圖像設置爲其他圖像?

u_v[:,:,:] = prev_frame[:,:,:] # Only where u_v[:,:] = black/(0,0,0) 
+0

黑色表示確切的零跨越所有三個頻道? – Divakar

+0

這是正確的!感謝澄清。 –

+0

我想你可以簡單地使用一個掩碼:'m =(u_v == 0).all(-1); u_v [m] = prev_frame [m]'。 – Divakar

回答

1

我們可以通過對0比較尋找沿最後軸(axis=-1)ALL零創建black像素的面具,然後ALL reduce沿着它 -

mask = (u_v==0).all(axis=-1) 

然後,用這個面具boolean-indexing到請從prev_frame中選擇並指定爲u_v -

u_v[mask] = prev_frame[mask] 

說明與樣品運行

1]輸入:

In [148]: u_v 
Out[148]: 
array([[[0, 0, 0], # first pixel set as all zeros for testing 
     [2, 1, 1]], 

     [[1, 2, 2], 
     [0, 3, 1]]]) 

In [149]: prev_frame 
Out[149]: 
array([[[0, 2, 1], <== this one is to be copied over to u_v 
     [3, 1, 0]], 

     [[2, 2, 3], 
     [2, 0, 1]]]) 

2]的黑色像素的面膜:

In [150]: mask = (u_v==0).all(axis=-1) 

In [151]: mask 
Out[151]: 
array([[ True, False], # first element is True as first pix was black 
     [False, False]], dtype=bool) 

3]布爾索引來選擇和分配:

In [152]: u_v[mask] = prev_frame[mask] 

In [153]: u_v 
Out[153]: 
array([[[0, 2, 1], <=== copied from prev_frame 
     [2, 1, 1]], 

     [[1, 2, 2], 
     [0, 3, 1]]]) 
相關問題