Mar*_*oma 10 python colors imagemagick image-processing python-imaging-library
我想用Python改变一种颜色.
如果存在PIL的快速解决方案,我宁愿这个解决方案.
目前,我使用
convert -background black -opaque '#939393' MyImage.png MyImage.png
Run Code Online (Sandbox Code Playgroud)
Joe*_*ton 18
如果numpy您的计算机上有,请尝试执行以下操作:
import numpy as np
from PIL import Image
im = Image.open('fig1.png')
data = np.array(im)
r1, g1, b1 = 0, 0, 0 # Original value
r2, g2, b2 = 255, 255, 255 # Value that we want to replace it with
red, green, blue = data[:,:,0], data[:,:,1], data[:,:,2]
mask = (red == r1) & (green == g1) & (blue == b1)
data[:,:,:3][mask] = [r2, g2, b2]
im = Image.fromarray(data)
im.save('fig1_modified.png')
Run Code Online (Sandbox Code Playgroud)
它将使用更多(3x)更多内存,但它应该相当快(约5倍,但对于更大的图像更多)更快.
另请注意,如果您只有RGB(而非RGBA)图像,上面的代码会比它需要的稍微复杂一些.但是,这个例子将单独保留alpha波段,而更简单的版本则不会.
这是对乔·金顿上述答案的修改。如果您的图像也包含 Alpha 通道,以下是如何执行此操作。
import numpy as np
import Image
im = Image.open('fig1.png')
im = im.convert('RGBA')
data = np.array(im)
r1, g1, b1 = 0, 0, 0 # Original value
r2, g2, b2, a2 = 255, 255, 255, 255 # Value that we want to replace it with
red, green, blue, alpha = data[:,:,0], data[:,:,1], data[:,:,2], data[:,:,3]
mask = (red == r1) & (green == g1) & (blue == b1)
data[:,:,:4][mask] = [r2, g2, b2, a2]
im = Image.fromarray(data)
im.save('fig1_modified.png')
Run Code Online (Sandbox Code Playgroud)
我花了很长时间才弄清楚如何让它发挥作用。我希望它对其他人有帮助。
| 归档时间: |
|
| 查看次数: |
20472 次 |
| 最近记录: |