2017-10-14 13 views
0

私は2つのBGR画像を持っています。 1つはほとんど黒です。私はすべての黒のピクセルを別の画像のピクセルに設定したい。黒でBGRイメージを別のイメージに設定する方法は?

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

黒では正確なゼロを意味します。 3つのチャンネルをすべて通過しますか? – Divakar

+0

これは間違いない!明確化のためにありがとう。 –

+0

私は単純にマスクを使うことができると思います: 'm =(u_v == 0).all(-1); u_v [m] = prev_frame [m] 'です。 – Divakar

答えて

1

我々は0と比較すると、それに沿ってALL reduceで最後の軸(axis=-1)に沿っALLゼロを探すことによりblackピクセルのマスクを作成することができます -

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]]]) 
関連する問題