2014-11-05 132 views
0

我有一个像这样的嘈杂背景的图像(炸毁,每个方块是一个像素)。我正在尝试对黑色背景进行标准化处理,以便我可以完全替换颜色。Python PIL比较颜色

这是我在想什么(伪代码):

for pixel in image: 
    if is_similar(pixel, (0, 0, 0), threshold): 
     pixel = (0, 0, 0) 

什么样的功能,可以让我比较两种颜色值在一定阈值内匹配吗?

+1

看看http://stackoverflow.com/questions/596216/formula-to-determine-brightness-of-rgb-color,使用亮度公式基本上给你的每个像素的值在灰度从而使您只能在一维中将您的像素与阈值进行比较。 – 2014-11-05 19:58:35

+1

查看维基百科的[Color Difference](http://en.wikipedia.org/wiki/Color_difference)文章,了解确定两种颜色相似程度的几种方法。最简单的答案是:将每种颜色视为三维坐标,并使用毕达哥拉斯公式找出它们之间的距离。 – Kevin 2014-11-05 20:07:31

回答

2

我结束了从this answer使用感知的亮度公式。它工作完美。

THRESHOLD = 18 

def luminance(pixel): 
    return (0.299 * pixel[0] + 0.587 * pixel[1] + 0.114 * pixel[2]) 


def is_similar(pixel_a, pixel_b, threshold): 
    return abs(luminance(pixel_a) - luminance(pixel_b)) < threshold 


width, height = img.size 
pixels = img.load() 

for x in range(width): 
    for y in range(height): 
     if is_similar(pixels[x, y], (0, 0, 0), THRESHOLD): 
      pixels[x, y] = (0, 0, 0)