Python CV2颜色检测混淆

Python CV2颜色检测混淆,python,opencv,computer-vision,rgb,hsv,Python,Opencv,Computer Vision,Rgb,Hsv,假设我有下面的图像,我想检测红色。一种可能的方法是找到HSV的上下范围,并添加一个遮罩: mask = cv2.inRange(imgHSV, low, high) 为了获得低和高值,我将执行以下操作: 我首先得到一个浅红色像素的RGB值,假设RGB是(112,4,61)。然后,我将使用以下计算器将其转换为HSV: 我得到的HSV为H=328度,S=96%,V=44%。假设上限为H=350度 对我来说有意义的是: mask=cv2.inRange(hsv,(328//2,int(0.96*2

假设我有下面的图像,我想检测红色。一种可能的方法是找到HSV的上下范围,并添加一个遮罩:

mask = cv2.inRange(imgHSV, low, high)
为了获得
值,我将执行以下操作:

我首先得到一个浅红色像素的RGB值,假设RGB是
(112,4,61)
。然后,我将使用以下计算器将其转换为HSV:

我得到的HSV为H=
328度,
S=96%
V=44%
。假设上限为
H=350度

对我来说有意义的是:

mask=cv2.inRange(hsv,(328//2,int(0.96*255),int(0.44*255)),(350/225525))

第一个除以2,因为
cv2
将色调存储为
0-180
,第二个和第三个是百分比乘以饱和度和色差的最大值

然而,这并没有给我正确的答案。我应该做的事情如下:

mask=cv2.inRange(hsv,(328//2,96,44),(350/2255255))


我不明白。如果计算器说饱和度是
96%
,饱和度范围是
0-255
,为什么我要把
96
放在这里?将
255
中的
95%
放在Python/OpenCV中是有意义的。我测量的HSV值为226度,220度,85度。在OpenCV中,这将是113220,85。我在S,V上用15%的加号或减号,在H上用60%的加号。我想你用来把RGB转换成HSV的工具是错误的,或者你对RGB值的测量是扭曲的。您的色调值似乎偏离了100。你有328个,我有226个。也许你在录音的时候打错了

输入:



同样,您应该使较低的值低于rgb到hsv值,足以覆盖红色变化,并使较高的值大于rgb到hsv值。有时,将饱和度和亮度设置为255是不好的,因为您现在测量的颜色接近白色,因此白色T恤的颜色也会如此。用括号括起来足以覆盖红色的变化,但不要超过括号,从而包括其他颜色。还要注意的是,红色色调=0,因此它与黑色、灰色、白色的色调相同。因此,如果你的饱和度太低,你也可能最终包括黑色、灰色或白色。一种方法是反转图像,使红色变为青色。谢谢,但这不是我的问题,我的第二条评论仅供参考。我的第一个评论是把你的低值降低一点。
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()