检查色阶范围内是否包含像素(RGB或HSV),如何

时间:2011-03-01 19:24:39

标签: python image-processing rgb hsv

我需要检查一个像素(RGB)是否包含在从浅粉色到深紫色的色标范围内。 使用RGB方案我可以这样检查:

IF image [x, y] [R]> threshold and image [x, y] [G]> threshold image [x, y] [B]> threshold and \
     image [x, y] [R] <threshold and image [x, y] [G] < threshold image [x, y] [B] <threshold THAN ...

如果没有,我也可以选择在HSV中使用像素。

谢谢!

3 个答案:

答案 0 :(得分:3)

您可能希望在HSV中工作,因为它比RGB更直观地映射到人类感知。如果你让一个人将颜色标记为“在范围内”或“超出范围”,并将它们映射到HSV中,你将能够找到指示进出的H,S和V值的界限。

然后,您可以使用像您所概述的简单范围检查来确定颜色是否进入。如果您需要Python帮助进行色彩空间转换,标准库模块colorsys将为您完成。

答案 1 :(得分:3)

使用每通道截止值相当于在RGB颜色空间中指定轴对齐的矩形框。盒子是一种讨厌的形状 - 你可能需要包括一些你并不想要的区域(在角落里)以避免排除你想要的区域(在面部的中心)。

如果您选择两个锚点和一个截止距离,它相当于一个任意对齐的三维椭球 - 它应该更准确地匹配您想要的颜色。

这样的东西
def colorRange(ax, ay, az, bx, by, bz, dist):
    def testPixel(cx, cy, cz):
        return (
            (cx-ax)**2 + (cy-ay)**2 + (cz-az)**2
            + (cx-bx)**2 + (cy-by)**2 + (cz-bz)**2
        ) < dist**2
    return testPixel

isPurple = colorRange(140,0,140, 255,75,255, 230)
isPurple(203,46,195)  # -> True

答案 2 :(得分:0)

如果您在讨论整数RGB值,可以将所有值都放入set,然后只需if color in set:

如果以复杂的方式定义'颜色范围',则定义一组具体的颜色可能是唯一的方法。