我需要检查一个像素(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中使用像素。
谢谢!
答案 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:
如果以复杂的方式定义'颜色范围',则定义一组具体的颜色可能是唯一的方法。