【发布时间】:2019-04-07 18:56:20
【问题描述】:
我在这里找到了一些与我想要做的相当接近的事情: Python: PIL replace a single RGBA color
但是,在我的场景中,我的图像最初是灰度图像,并在图像中添加了颜色注释(带有彩色注释的 X 射线)。我想用随机噪声替换任何不是灰度的像素。我的主要问题是用噪声而不是单一颜色替换值。
编辑:我找出了随机噪声部分,现在只是想弄清楚如何将彩色像素与最初的灰度像素分开。
from PIL import Image
import numpy as np
im = Image.open('test.jpg')
data = np.array(im) # "data" is a height x width x 3 numpy array
red, green, blue = data.T # Temporarily unpack the bands for readability
# Replace white with random noise...
white_areas = (red == 255) & (blue == 255) & (green == 255)
Z = random.random(data[...][white_areas.T].shape)
data[...][white_areas.T] = Z
im2 = Image.fromarray(data)
im2.show()
【问题讨论】:
-
“现在只是想弄清楚如何将彩色像素与最初的灰度像素分开”:
mask = (data == np.repeat(255,3)).all(axis=-1);color_pixels = data[~mask] -
当我在上面的代码中使用你的代码 sn-p 时,RAM 使用量超出了图表。
-
奇怪。据我所知,
mask不应该比你的white_areas大,如果你发现了原因,我很感兴趣。你可能会比较grey = np.repeat(255,3);mask=(data==grey).all(axis=-1),查看开销是否源于在每个像素处重新计算np.repeat(255,3)。否则,它似乎是一种更紧凑的计算white_areas的方法
标签: python numpy python-imaging-library