使用Python/PIL从图像中删除背景色
我一直在努力让这项工作,我真的有麻烦,所以将非常感谢一些帮助 使用下面的代码,我想将具有指定RGB值的特征更改为白色,并将图像中的所有其他特征更改为黑色(即,基本上从图像中提取特征。不幸的是,尽管我可以使我想要“提取”的特征变得精细,但当我尝试删除背景色时(我一直尝试使用使用Python/PIL从图像中删除背景色,python,image,python-2.7,python-imaging-library,Python,Image,Python 2.7,Python Imaging Library,我一直在努力让这项工作,我真的有麻烦,所以将非常感谢一些帮助 使用下面的代码,我想将具有指定RGB值的特征更改为白色,并将图像中的所有其他特征更改为黑色(即,基本上从图像中提取特征。不幸的是,尽管我可以使我想要“提取”的特征变得精细,但当我尝试删除背景色时(我一直尝试使用 mask2 = ((red != r1) & (green != g1) & (blue != b1)) data[:,:,:4][mask2] = [rb, gb, bb, ab] 但这似乎选择了除红色==
mask2 = ((red != r1) & (green != g1) & (blue != b1))
data[:,:,:4][mask2] = [rb, gb, bb, ab]
但这似乎选择了除红色==r1或绿色==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')
使用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')
灰度图像如何?@alessiosavi-概念相同,但对遮罩和替换使用单个灰度值,而不是r、g、b值。@alessiosavi-和其他使用
numpy灰度替换值搜索的图像