Python PIL比较颜色

4

我有一张像这样的带噪声背景的图片(放大后,每个方格都是一个像素)。我想要规范化黑色背景,以便可以完全替换掉颜色。

这是我的想法(伪代码):

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

什么样的函数可以让我比较两个颜色值并在一定范围内匹配?

1
请查看https://dev59.com/QHRB5IYBdhLWcg3wiHpl,使用亮度公式基本上可以为您提供每个像素在灰度下的值,从而使您能够仅在一个维度上将您的像素与阈值进行比较。 - Darren Ringer
2
请查看维基百科的颜色差异文章,了解一些确定两种颜色有多相似的方法。最简单的答案是:将每个颜色视为三维坐标,并使用勾股定理来找到它们之间的距离。 - Kevin
1个回答

9

我最终使用了这个答案中的所谓亮度公式。它完美地工作了。

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接