【发布时间】:2020-08-27 20:55:14
【问题描述】:
假设我有下面的图片,我想检测红色。一种可能的方法是找到 HSV 的下限和上限并添加掩码:
mask = cv2.inRange(imgHSV, low, high)
为了获得 low 和 high 值,我会这样做:
我会首先得到一个浅红色像素的 RGB 值,假设 RGB 是(112, 4, 61)。然后我会使用以下计算器将其转换为HSV:https://www.rapidtables.com/convert/color/rgb-to-hsv.html
我会得到 HSV 为 H = 328 degrees、S = 96%、V = 44%。假设上限有H = 350 degrees。
对我来说有意义的是:
mask = cv2.inRange(hsv, (328//2, int(0.96 * 255), int(0.44 * 255)), (350/2, 255, 255))
第一个除以2,因为cv2将色调存储为0-180,第二个和第三个是百分比乘以饱和度和值的最大值。
但是,这并没有给我正确的答案。我应该做的事情如下:
mask = cv2.inRange(hsv, (328//2, 96, 44), (350/2, 255, 255))
我不明白。如果计算器说饱和度是96%,而饱和度范围是0-255,我为什么要把96放在这里?将95% 放在255 中是否有意义?
【问题讨论】:
-
您应该使较低的值低于您的 rgb 到 hsv 值,足以覆盖红色变化,并使较高的值大于您的 rgb 到 hsv 值,同样。有时将饱和度和亮度设为 255 并不好,因为您现在正在测量接近白色的颜色,因此白色 T 恤会出现颜色。括号足够覆盖红色的变化,但不能超过括号,因此包括其他颜色。
-
还要注意红色的色调=0,所以它与黑色、灰色、白色的色调相同。因此,如果您的饱和度太低,您最终也可能会包含黑色、灰色或白色。一种解决方法是反转图像,使红色变为青色。然后是青色的阈值。
-
谢谢,但这不是我的问题
-
我的第二条评论仅供参考。我的第一条评论是让你的低值低一点。
标签: python opencv computer-vision rgb hsv