更改像素颜色作为其颜色的功能

问题描述:

很难找到这个问题的真正描述性标题,但基本上,我想使浅灰色更白。更改像素颜色作为其颜色的功能

现在我在做这样的事情:

# Separate channels of image (from BGR format) 
b, g, r = gray[:, :, 0], gray[:, :, 1], gray[:, :, 2] 

# Create a mask for the whitish pixels 
mask = (b > 128) & (g > 128) & (r > 128) 

# Put thoses pixels as white 
gray[:, :, :3][mask] = [255, 255, 255] 

但我不希望他们是全白,但只有更白,所以考虑到它们的当前值。这里是一个示例函数的伪代码:

if (r>128 && g>128 && b>128) 
    r = r + (255-r)/2 
    g = ... 

我该如何在python中执行此操作? 非常感谢您的帮助,我希望这已经足够清楚。

+1

问题是什么? –

使用a作为输入RGB图像,可以建议两种矢量化方法。

方法1:创建的地方面具修改保持尺寸和使用np.where做选择的新值和旧值之间,从而创建一个新的图像阵列 -

mask = (a > 128).all(-1,keepdims=True) 
new_vals = a + (255 - a)//2 
a = np.where(mask, new_vals, a) 

方法2:创建的地方面膜没有保留的尺寸被修改,并且让我们用boolean-indexing用于现场编辑 -

mask = (a > 128).all(-1,keepdims=False) 
a_masked = a[mask] 
new_vals_masked = a_masked + (255 - a_masked)//2 
a[mask] = new_vals_masked 

采样运行 -

In [34]: np.random.seed(0) 

In [35]: a = np.random.randint(0,255,(2,2,3)).astype(np.uint8) 

In [36]: a[0,0] = [200,180,160] 

In [37]: a[1,1] = [170,150,220] 

In [38]: a # Original image array 
Out[38]: 
array([[[200, 180, 160], 
     [192, 67, 251]], 

     [[195, 103, 9], 
     [170, 150, 220]]], dtype=uint8) 

In [39]: mask = (a > 128).all(-1,keepdims=True) 
    ...: new_vals = a + (255 - a)//2 
    ...: a = np.where(mask, new_vals, a) 
    ...: 

In [40]: a # New array 
Out[40]: 
array([[[227, 217, 207], 
     [192, 67, 251]], 

     [[195, 103, 9], 
     [212, 202, 237]]], dtype=uint8) 
+1

谢谢,就是这样! 甚至不知道有这样一个函数np.where()^^ –