Python CV2颜色检测混淆
假设我有下面的图像,我想检测红色。一种可能的方法是找到HSV的上下范围,并添加一个遮罩: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
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()