黑色物体检测的范围是多少?
我尝试了以下代码
cvInRangeS(imgHSV, cvScalar(0, 0, 0, 0), cvScalar(0, 255, 255, 0), imgThreshold);
但它不起作用。
答案 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,则任何色相看起来都像“黑色”。相反,如果要从图像中分割真实的黑色(而不是“暗”触发的“黑色”),则设置饱和度阈值始终是首要任务。然后结合“色相”和“价值”蒙版作为辅助蒙版,可以为您提供更准确的答案。