【问题标题】:Color Detection using YCrCb color space?使用 YCrCb 颜色空间进行颜色检测?
【发布时间】:2009-12-04 15:47:16
【问题描述】:

我发现这段代码试图在 RGB 颜色空间中跟踪红色,

  // red color detection, turn the detected one into white
  if (((red > (0.85 * (green + blue))) && (red > 105)) 
     && ((red - green > 73)) && (((green < 150) 
     || ((green >= 150) && (blue > 140)))))  {
        // set the pixel to white
        red = 255; green = 255; blue = 255;
  }

有谁知道如何使用 YCrCb 颜色空间而不是 RGB 来跟踪颜色? 我只是不知道每种颜色的确切范围是多少以便跟踪它,例如YCrCb 中的红色范围。

编辑:我试过 HSV,它没有 比上面的RGB更好的结果 预计,因此,我认为 使用 YCrCb。

谢谢。

【问题讨论】:

    标签: java image-processing rgb


    【解决方案1】:

    首先您可以查看here 以获得更好的定义。这种颜色模型 (YCrCb) 更广泛地用于 mpeg 等视频格式。大多数视频格式,如果视频使用 4:2:2 格式,这意味着 Y 分量(表示亮度)与源 RGB 图像的大小相同,而 Yb(蓝色分量)和 Yr(红色分量)表示原始图像分辨率的一半。这样做可以减少文件的带宽。

    但是,正如 kigurai 所说,如果您想跟踪颜色,最好使用 HSV(或 HSI)格式。在该格式中,H(色调)分量表示颜色本身,范围为 0..359(360 度)。因此,为了避免将数字从 0..255 四舍五入,您可以使用 16 位矩阵来表示内存中的该通道。同样在这个颜色空间中,S 表示饱和度(H 中的颜色分量在该像素处存在多少),S(或 I)表示图像亮度。

    要算法来实现并不难:

    I = 1/3 * (R+G+B)

    S = 1 - (3/(R+G+B))*(min(R,G,B))

    H = cos^-1 ((((R-G)+(R-B))/2)/ (sqrt((R-G)^2 + (R-B)*(G-B) )))

    【讨论】:

      【解决方案2】:

      我建议您改用 HSV colour space,这很可能会使这更容易。

      【讨论】:

        【解决方案3】:

        在 YCbCr 中,每个组件的典型范围是 16 到 240。请参阅以下Wikipedia entry,其中详细介绍了在 RGB 和 YCbCr 之间转换的各种公式。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-25
          • 1970-01-01
          • 2011-12-19
          • 1970-01-01
          • 2021-11-24
          相关资源
          最近更新 更多