【发布时间】:2012-02-29 01:17:52
【问题描述】:
在我将阈值设置为黄色之后,我将图像转换为 HSV,因此代码为 cvInRangeS(imgHSV, cvScalar(112, 100, 100), cvScalar(124, 255, 255), imgThreshed); 但它并不总是给我黑色图像。
【问题讨论】:
标签: c++ c image-processing computer-vision
在我将阈值设置为黄色之后,我将图像转换为 HSV,因此代码为 cvInRangeS(imgHSV, cvScalar(112, 100, 100), cvScalar(124, 255, 255), imgThreshed); 但它并不总是给我黑色图像。
【问题讨论】:
标签: c++ c image-processing computer-vision
你应该试试这个"tracking yellow objects".的教程
它为黄色对象提供 cvInRangeS(imgHSV, cvScalar(20, 100, 100), cvScalar(30, 255, 255), imgThreshed) 的 HSV 范围。
如果你对选择颜色有任何疑问,试试这个:http://www.yafla.com/yaflaColor/ColorRGBHSL.aspx
【讨论】:
http://stackoverflow.com/questions/23312898/trying-to-make-color-balance-of-photoshop-using-opencv?noredirect=1#comment35693629_23312898这是我的情况
我知道你问的问题是关于 c++ 的,我有 python 脚本来检测黄色,这可能会对你或其他人有所帮助..
def colorDetection(image):
hsv = cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
'''Red'''
# Range for lower red
red_lower = np.array([0,120,70])
red_upper = np.array([10,255,255])
mask_red1 = cv2.inRange(hsv, red_lower, red_upper)
# Range for upper range
red_lower = np.array([170,120,70])
red_upper = np.array([180,255,255])
mask_red2 = cv2.inRange(hsv, red_lower, red_upper)
mask_red = mask_red1 + mask_red2
red_output = cv2.bitwise_and(image, image, mask=mask_red)
red_ratio=(cv2.countNonZero(mask_red))/(image.size/3)
print("Red in image", np.round(red_ratio*100, 2))
'''yellow'''
# Range for upper range
yellow_lower = np.array([20, 100, 100])
yellow_upper = np.array([30, 255, 255])
mask_yellow = cv2.inRange(hsv, yellow_lower, yellow_upper)
yellow_output = cv2.bitwise_and(image, image, mask=mask_yellow)
yellow_ratio =(cv2.countNonZero(mask_yellow))/(image.size/3)
print("Yellow in image", np.round(yellow_ratio*100, 2))
【讨论】:
【讨论】:
对于黄色,范围应该是 23 到 40,例如我在黄色对象跟踪程序中使用的范围
//为黄色设置阈值
cvInRangeS(hsvframe,cvScalar(23,41,133),cvScalar(40,150,255),threshy);
【讨论】:
我认为您的色调值可能不正确。如果您尝试检测黄色,我不确定您从哪里获得 112-124 色调范围。我希望这些值更接近 40,所以不妨试试 34-46 之类的范围。
【讨论】:
(255,255,0) 之类的值开始,如果您正在寻找黄色,请查看它的位置。另请注意,OpenCV 以 BGR 顺序存储内容,因此 (0,255,255) 可能代表您插入到 inRange() 的范围。