【问题标题】:Black color object detection HSV range in opencvopencv中的黑色物体检测HSV范围
【发布时间】:2014-08-20 06:35:30
【问题描述】:

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

我尝试了以下代码

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

但它不起作用。

【问题讨论】:

  • 您好,谢谢您的回答。但它也不起作用......
  • 更好的查找方法是制作程序,该程序将打印您使用鼠标手动单击的黑色区域的颜色。通过这种方式,您可以打印出您认为是黑色的良好范围。很难说出一个值,因为它可能取决于照明和其他可能对我们不同的条件。还有一个建议,如果您只对黑色感兴趣,请尝试单张灰度图像。
  • 查看使用 opencv here 的色轮实现,您可以使用鼠标和相应的 hsv 值手动选择颜色。对于黑色,HSV 空间中的取值范围可能接近于零,同时建议使用新的 C++ API 代替已弃用的 C。

标签: c++ opencv hsv


【解决方案1】:

对于 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);

【讨论】:

  • 谢谢大家的建议。 cvInRangeS(imgHSV, cvScalar(0, 0, 0, 0), cvScalar(180, 255, 40, 0), imgThreshold);它适用于黑色。
【解决方案2】:

HSVHSL 色彩空间中的黑色,被检测为低值(或 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);

【讨论】:

    【解决方案3】:

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

    Value 是明度/暗度值。在光线不好的情况下,任何色调都可以被视为黑色。

    饱和度也称为“色度”。它描绘了任何色调的信号强度水平。如果 S=0,任何色调看起来都像“黑色”。相反,如果你想从图像中分割出真正的黑色(而不是由“黑暗”触发的“黑色”),设置一个小的饱和度阈值始终是首要任务。然后结合 Hue 和 Value 蒙版作为辅助蒙版,会给你一个更准确的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-19
      • 2022-10-26
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多