opencv - 如何在 OpenCV 中设置 HSV 颜色范围?

标签 opencv hsv hsb

我有一部手机,它的 HSV 直方图很像 blow,我想跟踪这部手机的运动。基于它的直方图,我将图像范围设置如下:

greenLower = (300, 0, 50)
greenUpper = (50, 128,250 )
cv2.inRange(hsv, greenLower, greenUpper)

但是挥动手机没有检测到任何东西,我很确定这是因为颜色范围不对,你能告诉我如何正确设置颜色范围吗?特别是当HUE值在[300~50]之间时,我应该把它设置为 (50~300) 还是 (300~50) 因为 HUE 是一个圆圈。

Phone

Phone

HSV histogram:

HSV Histogram

最佳答案

你错误地设置了上限和下限,它们必须是:

greenLower = (50, 0, 50)         # Previously (300, 0, 50)
greenUpper = (300, 128, 250)     # Previously (50, 128,250)

同时确保 hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 作为 OpenCV 遵循 BGR 约定。

编辑:

要分割多个范围0~50300~359中的颜色,可以对两个范围执行两次cv2.inRange()作为:

greenLower1 = (0, 0, 20)         
greenUpper1 = (50, 128, 100)     

greenLower2 = (300, 0, 20)         
greenUpper2 = (359, 128, 100)     

mask1 = cv2.inRange(img_hsv, greenLower1, greenUpper1)
mask2 = cv2.inRange(img_hsv, greenLower2, greenUpper2)

mask = cv2.max(mask1, mask2)

关于opencv - 如何在 OpenCV 中设置 HSV 颜色范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42825020/

相关文章:

opencv - 图像未使用 DBSCAN 正确分割

c# - 在 RGB 和 HSB 颜色值之间切换的算法

Java:使用 HSV 循环特定颜色

python - 计算红色像素值并在 Python 中绘制直方图

python - 使用 Python 和 Numpy 将 2 个图像混合为 1 个

python - 检测此图像中的绿线并计算它们的长度

opencv - 饱和度、值重新映射以补偿光照

javascript - 颜色 (h,s,b) 从 360 到 0、从 0 到 (-360) 以及从 (-360) 到 (-720) 等等

opencv - 引发 TypeError ("Image data cannot be converted to float")

php - PHP 中 Hexcolor 的百分比