标签: python opencv image-processing
我有以下图片。
Other Samples
我想检测六个方形的绿色部分和它们上面的一个圆形部分。我基本上想要一个二进制图像,这些部分标记为1(白色),其他所有部分标记为0(黑色)。
到目前为止我做了什么?
我找到了一系列H,S和V,其中这些颜色落在单个图像上工作正常,但我有多个这样的图像,有些在不同的照明(亮度)条件下,并且范围不起作用在那些情况下。我该怎么做才能使阈值处理尽可能保持亮度不变?我应该采取不同的方法进行阈值处理吗?
答案 0 :(得分:1)
您所做的是手动分析特定图像阈值处理所需的值,然后应用它。你看到的是,在一张图像上进行的分析并不一定适合其他图像。
解决方案是自动为每个图像进行分析。这可以通过为每个频道创建直方图来实现,如果你在HSV中工作,我猜测在这种情况下H频道几乎没用。
无论如何,一旦你有直方图,你应该用Lloyd-Max这样的东西来分析阈值,这基本上是K-Means类型的强度聚类。这应该给出质心的白色背景和其他颜色的强度。然后根据群集标准差选择阈值。
例如,在上面给出的图像中,S通道的直方图如下所示:
您可以看到0附近的大斑点是饱和度最低的白色背景。