如何检查像素(RGB或HSV)是否位于色彩范围内?

1 投票
3 回答
2387 浏览
提问于 2025-04-16 12:46

我需要检查一个像素(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

如果你在说的是整数形式的RGB值,你可以把所有的值放进一个set(集合)里,然后直接用if color in set:来检查颜色是否在这个集合中。

如果你的“颜色范围”定义得比较复杂,可能唯一的办法就是明确地定义一组具体的颜色。

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
3

你可能想用HSV颜色模型,因为它比RGB更符合人类的视觉感知。如果让人来标记颜色是“在范围内”还是“超出范围”,然后把这些颜色转换成HSV格式,你就能找到H、S和V值的界限,从而判断颜色是属于范围内还是范围外。

接着,你可以用一个简单的范围检查,像你之前提到的那样,来判断颜色是否在范围内。如果你需要在Python中进行颜色空间转换的帮助,标准库中的colorsys模块可以帮你完成这个工作。

撰写回答