Вот очень простой способ сделать это, используя PIL / Pillow:
#!/usr/bin/env python3
from PIL import Image
import numpy as np
# Load image and ensure it is RGB (not palette)
im = Image.open('circles.jpg').convert('RGB')
# Make into Numpy array so we can do fast, vectorised operations
na = np.array(im)
# Make a mask, which is True wherever Blue channel is high, False elsewhere - see #1 below
mBlueHi = na[...,2] >= 174
# Likewise for Green channel - see #2 below
mGreenHi = na[...,1] >= 174
# In our original image "na", anywhere the Green or Blue mask is set, make it white
na[mGreenHi | mBlueHi] = [255,255,255]
# Make back into PIL Image and save
Image.fromarray(na).save('result.png')
Примечание # 1: изображение сохраняется в 3-х мерный массив, высота х ширина х каналов RGB. Красный находится в канале 0, поэтому na[:,:,0]
и na[...,0]
- сокращение от этой же вещи.
Примечание # 2: Зеленый находится во втором канале, начиная с индекса 0, поэтому зеленые пиксели могут быть адресовано с использованием na[:,:,1]
или равно na[...,1]
Обратите внимание, что JPEG с потерями и часто является плохим выбором для промежуточных файлов при обработке изображений, поскольку он изменяет значения, чтобы сделать файлы меньше. Попробуйте использовать PNG без потерь.