<p>从这张帕丁顿的照片开始:</p>
<p><a href="https://i.stack.imgur.com/XT9hr.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/XT9hr.png" alt="enter image description here"/></a></p>
<p>我想您应该使用<code>np.where()</code>如下将所有红色区域变成品红,将所有其他区域变成黄色:</p>
<pre><code>#!/usr/bin/env python3
from PIL import Image
import numpy as np
# Load PIL Image and ensure RGB rather than palette based, then make into Numpy array
pi = Image.open('paddington.png').convert('RGB')
na = np.array(pi)
# Now make 2 images same size, one magenta, one yellow
magenta = np.zeros_like(na) + [255,0,255]
yellow = np.zeros_like(na) + [255,255,0]
# Anywhere paddington is red, make him magenta. Anywhere else, make him yellow.
result = np.where((na==[255,0,0]).all(axis=-1)[...,None], magenta, yellow)
# Save result
Image.fromarray(result.astype(np.uint8)).save('result.png')
</code></pre>
<p><a href="https://i.stack.imgur.com/sjGqk.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/sjGqk.png" alt="enter image description here"/></a></p>
<p>当然,这是没有必要的,使一个完整的洋红和黄色的图像大小,我只是这样做,以符合您的原始代码。你可以用一个像素,节省内存,让他变成绿色和蓝色,就像这样:</p>
<pre><code>result = np.where((na==[255,0,0]).all(axis=-1)[...,None], [0,255,0], [0,0,255])
</code></pre>
<p><a href="https://i.stack.imgur.com/8fPgW.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/8fPgW.png" alt="enter image description here"/></a></p>