黑色物体检测在opencv中的HSV范围

时间:2014-08-20 06:35:30

标签: c++ opencv hsv

黑色物体检测的范围是多少?

我尝试了以下代码

cvInRangeS(imgHSV, cvScalar(0, 0, 0, 0), cvScalar(0, 255, 255, 0), imgThreshold);

但它不起作用。

3 个答案:

答案 0 :(得分:12)

对于HSV范围内的黑白颜色,您必须将色调设置为最大范围(0到180),并将饱和度设置为最大范围(0到255)。您可以使用该值,例如,0到30或40表示黑色,200到255表示白色。

// for black
cvInRangeS(imgHSV, cvScalar(0, 0, 0, 0), cvScalar(180, 255, 30, 0), imgThreshold);

// for white
cvInRangeS(imgHSV, cvScalar(0, 0, 200, 0), cvScalar(180, 255, 255, 0), imgThreshold);

或者您可以使用C ++界面:

// for black
cv::inRange(imgHSV, cv::Scalar(0, 0, 0, 0), cv::Scalar(180, 255, 30, 0), imgThreshold);

// for white   
cv::inRange(imgHSV, cv::Scalar(0, 0, 200, 0), cv::Scalar(180, 255, 255, 0), imgThreshold);

答案 1 :(得分:3)

HSV HSL 颜色空间中的黑色,使用低值(或 HSL 中的亮度)检测到。

高值检测到 HSL 中的白色。 在高亮度和低饱和度下检测到白色 HSV

白色

cv::inRange(imgHSL, cv::Scalar(0, 0, 200, 0), cv::Scalar(180, 255, 255, 0), imgThreshold);

cv::inRange(imgHSV, cv::Scalar(0, 0, 200, 0), cv::Scalar(180, 20, 255, 0), imgThreshold);

答案 2 :(得分:0)

色相就像您的眼睛接收的主要光波长。但是黑光波长超出可见光波长范围。色调不会直接算出黑光。

值是明暗度值。在恶劣的照明条件下,任何色调都可以视为黑色。

饱和度也称为“色度”。它描述了任何色调的信号强度水平。如果S = 0,则任何色相看起来都像“黑色”。相反,如果要从图像中分割真实的黑色(而不是“暗”触发的“黑色”),则设置饱和度阈值始终是首要任务。然后结合“色相”和“价值”蒙版作为辅助蒙版,可以为您提供更准确的答案。