【问题标题】:how can i track GREEN color in openCV? while red&blue worked如何在 openCV 中跟踪绿色?而红色和蓝色工作
【发布时间】:2020-07-14 08:20:44
【问题描述】:

红色和蓝色效果很好,绿色发生了什么。 我读过the similar questionanother one,还是不行。 看我的照片frame,mask,res

import cv2 as cv
import numpy as np
cap = cv.VideoCapture(0)
while(1):
    _, frame = cap.read()
    hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
    lower_blue = np.array([110,50,50])
    upper_blue = np.array([130,255,255])
    lower_green = np.array([45,100,20])
    upper_green = np.array([75,255,255])
    lower_red = np.array([0,100,100])
    upper_red = np.array([10,255,255])
    mask1 = cv.inRange(hsv, lower_blue, upper_blue)
    mask2 = cv.inRange(hsv, lower_green, upper_green)
    mask3 = cv.inRange(hsv, lower_red, upper_red)
    res = cv.bitwise_and(frame,frame, mask= mask1+mask2+mask3)
    cv.imshow('frame',frame)
    cv.imshow('mask',mask1+mask2+mask3)
    cv.imshow('res',res)
    k = cv.waitKey(5) & 0xFF
    if k == 27:
        break
cv.destroyAllWindows()

【问题讨论】:

  • 您的蒙版可能无法代表您尝试跟踪的绿色。看起来你的下绿色和上绿色的色调值实际上是偏红的颜色。
  • 我运行green=np.uint8([[[0,255,0]]]) hsv_green=cv.cvtColor(green,cv.COLOR_BGR2HSV) print(hsv_green),结果是[[[ 60 255 255]]],所以我设置了上下色相45(60-15),75(60+15),你能告诉我这有什么问题吗? @Meto
  • 我真的不知道为什么 cvtColor() 会产生这样的输出。如果我们认为色调像一个圆圈,红色在 0 到 60 度之间,黄色在 61 到 120 度之间,绿色在 121 到 180 度之间。如果我们将它缩放到 opencv 的值范围,较低的绿色应该是 85。
  • 下绿色[85,100,20] 上绿色[105,255,255] 有效!为什么是85?我想不通@Meto
  • 看看这里programmingdesignsystems.com/color/…。有一个 3D HSV 模型可以帮助您更好地掌握概念。

标签: python opencv


【解决方案1】:

在 HSV 颜色空间中,Hue 代表了我们所感知的传统颜色。另一个主要区别是,当 RGB 颜色空间表示为立方体时,HSV 是圆柱体,因此 Hue 的范围实际上是 0 to 360 degrees. Hue 表示 ~121 to ~180 度之间的绿色值,当我们将其重新缩放到 Opencv 函数的输入范围时( 0-255) green 的值应该在85 to 128. 之间如果你正在寻找一个视觉表示this page 有一个很好的RGB 和HSV 颜色空间的交互模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 2016-08-20
    • 2013-12-19
    • 1970-01-01
    • 2011-10-28
    相关资源
    最近更新 更多