2017-10-14 40 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]]]) 
相关问题