按背景颜色分割图像 – OpenCV Android

前端之家收集整理的这篇文章主要介绍了按背景颜色分割图像 – OpenCV Android前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试细分名片并将其按背景颜色分割,以将它们视为不同的感兴趣区域.

例如这种卡片:

应该能够被分成两个图像,因为有2种背景颜色.有没有关于如何解决这个问题的建议?我试过做一些轮廓分析并没有太成功.

其他示例卡:

这张卡应该提供3个分段,因为有三个部分,即使它只有2种颜色(虽然2种颜色可以).

上面的卡应该只提供一个分段,因为它只是一种背景颜色.

我还没想到渐变背景.

解决方法

这取决于其他卡的外观,但如果图像都具有很高的质量,那就不应该太难了.

在您发布的示例中,您可以只收集边框像素的颜色(大多数左列,最右列,第一行,最后一行)并将您找到的内容视为可能的背景颜色.也许检查是否有足够多的像素具有大致相同的颜色.你需要某种距离测量.一个简单的解决方案是在RGB颜色空间中使用欧氏距离.

更通用的解决方案是在整个图像的颜色直方图中找到聚类,并将具有超过总像素量的x%的每种颜色(再次具有公差)视为背景颜色.但是,您定义为背景取决于您想要实现的目标以及图像的外观.

如果您需要进一步的建议,您可以发布更多图像,并标记您想要检测的图像的哪些部分作为背景颜色,哪些不是.

编辑:您的两个新图像也显示相同的模式.背景颜色占据了图像的很大一部分,没有噪声,也没有颜色渐变.所以一个简单的方法可能如下所示:

>计算图像的直方图:参见http://docs.opencv.org/modules/imgproc/doc/histograms.html#calchisthttp://docs.opencv.org/doc/tutorials/imgproc/histograms/histogram_calculation/histogram_calculation.html
>找到直方图中最突出的颜色.如果您不想自己迭代Mat,可以使用minMaxLoc(http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#minmaxloc),如calchist文档中所示(见上文),如果颜色占用了像素数的足够百分比,则将其保存并设置相应的bin.直方图为零.重复,直到不再达到您的百分比.然后,您将保存一份最突出的颜色列表,即背景颜色.
>为每种背景颜色阈值图像.见:http://docs.opencv.org/doc/tutorials/imgproc/threshold/threshold.html
>在生成的螺纹保持图像上找到每种背景颜色的相应区域.见:http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/find_contours/find_contours.html

如果您的示例无法使用此方法,请发布它们.

猜你在找的Android相关文章