匹配HLS

时间:2015-11-26 21:07:44

标签: java image opencv colors

我试图匹配HLS(Hue Lightness Saturation)中的所有绿色,但没有太大的成功。我必须创建一个只包含青椒的图像。来源图片:

http://i.stack.imgur.com/ELNKV.png

我需要的只是H,L和S之间的特定部分/依赖关系。我在互联网上搜索过这个但是我失败了:(。

我在Java中使用OpenCV。我目前的代码(部分):

private double lsRatio(HLS hls) {
    return hls.getL() / hls.getS();
}

private boolean isCondition(HLS hls) {
    return hls.getS() >= 0 && lsRatio(hls) > 0.8 && lsRatio(hls) < 5 && (hls.getH() <= 120 || hls.getH() >= 80);
}

对于这种情况,我得到:

http://i.stack.imgur.com/NPvKw.png

正如你所看到的,还有一些红色。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我认为转换为HLS很好。我尝试使用HSL Color转换并获得相同的结果。

(hls.getH() <= 120 || hls.getH() >= 80)

这将包括所有颜色。 (包括红色 - 即0小于120)。您的其他条件是过滤掉大部分读取音调/阴影。

我尝试了一些更简单的方法:

private boolean isCondition(HLS hls)
{
    if (hls.getH() < 60 || hls.getH() > 140)
        return false;

    return true;
}

我最初尝试了80 - 120的范围,但它错过了很多颜色。也许60 -140包含太多非绿色,在这种情况下,您可以尝试应用其他条件来排除更多颜色。