【发布时间】:2020-07-14 08:20:44
【问题描述】:
红色和蓝色效果很好,绿色发生了什么。 我读过the similar question 和another 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 模型可以帮助您更好地掌握概念。