2014-01-19 3 views
3

Я пытался заставить это работать, и у меня действительно проблемы, поэтому очень благодарен за помощь.Удалить цвет фона из изображения с помощью Python/PIL

Используя приведенный ниже код, я хочу изменить функции с указанными значениями RGB на белый, а также на все другие функции изображения черного (то есть в основном извлекать функции из изображения). К сожалению, хотя я могу сделать функции Я хочу, чтобы «извлечь» хорошо, когда я пытаюсь удалить цвет фона (я пытался использовать

mask2 = ((red != r1) & (green != g1) & (blue != b1)) 
data[:,:,:4][mask2] = [rb, gb, bb, ab] 

но кажется, что выбрать любые пиксели, кроме тех, с красным == Г1 или зеленый == g1 и т. д., оставляя мне фоновое изображение, которое довольно «шумно».) Кто-нибудь знает способ буквально извлечь эти пиксели с указанными значениями RGB или лучший способ перекрасить фоновые пиксели?

Благодаря

import numpy as np 
from PIL import Image 

im = Image.open('/home/me/nh09sw.tif') 
im = im.convert('RGBA') 
data = np.array(im) 

r1, g1, b1 = 246, 213, 139 # Original value 
rw, gw, bw, aw = 255, 255, 255, 255 # Value that we want to replace features with 
rb, gb, bb, ab = 0, 0, 0, 255 #value we want to use as background colour 

red, green, blue, alpha = data[:,:,0], data[:,:,1], data[:,:,2], data[:,:,3] 

mask = ((red == r1) & (green == g1) & (blue == b1)) 
data[:,:,:4][mask] = [rw, gw, bw, aw] 

im = Image.fromarray(data) 

im.save('/home/me/nh09sw_recol.tif') 

ответ

5

Использование np.all() сравнивают по третьей оси.

import numpy as np 
from PIL import Image 

im = Image.open('my_file.tif') 
im = im.convert('RGBA') 
data = np.array(im) 
# just use the rgb values for comparison 
rgb = data[:,:,:3] 
color = [246, 213, 139] # Original value 
black = [0,0,0, 255] 
white = [255,255,255,255] 
mask = np.all(rgb == color, axis = -1) 
# change all pixels that match color to white 
data[mask] = white 

# change all pixels that don't match color to black 
##data[np.logical_not(mask)] = black 
new_im = Image.fromarray(data) 
new_im.save('new_file.tif') 
Смежные вопросы