【问题标题】:Python CV2 color detection confusionPython CV2 颜色检测混淆
【发布时间】:2020-08-27 20:55:14
【问题描述】:

假设我有下面的图片,我想检测红色。一种可能的方法是找到 HSV 的下限和上限并添加掩码:

mask = cv2.inRange(imgHSV, low, high)

为了获得 lowhigh 值,我会这样做:

我会首先得到一个浅红色像素的 RGB 值,假设 RGB 是(112, 4, 61)。然后我会使用以下计算器将其转换为HSVhttps://www.rapidtables.com/convert/color/rgb-to-hsv.html

我会得到 HSV 为 H = 328 degreesS = 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


【解决方案1】:

这在 Python/OpenCV 中适用于我。我测量的 HSV 值为 226deg,220,85。所以在 OpenCV 中是 113,220,85。我在 S、V 上应用 15% 加减百分比,在 H 上应用大约 60%。我认为您用来从 RGB 转换为 HSV 的工具有误,或者您对 RGB 值的测量有偏差。你的 Hue 值似乎差了 100。你有 328,我有 226。也许你在录制时打错了。

输入:

import cv2
import numpy as np

# Read image
image = cv2.imread('redclock.jpg')

# Convert to HSV
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# Define lower and uppper limits
# +-15% of S and V, +-60 on H
#226,220,85 => 226/2,86%,33% = 113,0.86*255,0.33*255
lower = np.array([(113-60), int((0.86-0.15)*255), int((0.33-0.15)*255)])
upper = np.array([(113+60), int((0.86+0.14)*255), int((0.33+0.15)*255)])

# Create mask to only select white
thresh = cv2.inRange(hsv, lower, upper)

# save results
cv2.imwrite('redclock_thresh.jpg', thresh)

cv2.imshow('thresh', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()

【讨论】:

    猜你喜欢
    • 2017-06-09
    • 2013-06-07
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多